1 vector是啥玩意

(1)可以使用下标访问个别的元素

(2)迭代器可以按照不同的方式遍历

(3)可以在容器的末尾增加或者删除元素

2 容器大小和容器的容量区别

(1)大小是元素的个数,容量是分配的内存大小。vector::size()容器的大小 vecto::capacity返回容器值。

(2)每次重新分配内存都会影响程序的性能,所以一般分配的容量都打羽容器的大小。

3 vector中各种初始化方法

 #include <vector>
#include <iostream>
using namespace std;
int main(){
int a[7]={1,2,3,4,5,6,7};
vector<int> ivector(a,a+7);/*vector的赋值并不可以像数组一样方便的用花括号方便 的完成赋值,这里借用了数组来初始化这个vector
初始化方式vector<elementType> intvec(begin,end);这样可以用起来看上去还是比较习惯的。*/
vector<int>::iterator iter;
for (iter=ivector.begin();iter!=ivector.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
ivector[5]=1;
/*单个vector的赋值,这个方式看上去还是和数组一样的
也可以这么写ivector.at(5)=1;但是就是不习惯 */
cout<<ivector[5]<<endl<<ivector.size()<<endl;
for (iter=ivector.begin();iter!=ivector.end();iter++){
cout<<*iter<<" ";
}
cout<<endl;
for(int i=0;i<5;i++){
cout<<ivector[i]<<" ";
}
cout<<endl;
return 0;
}

foreach用法:

 #include <vector>
#include <algorithm>
#include <iostream>
using namespace std; void print(int n)
{
cout<<n<<" ";
} int main(){
int a[7]={1,2,3,4,5,6,7};
vector<int> ivector(a,a+7);
vector<int>::iterator iter;
for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历
cout<<endl;
ivector[5]=1;
cout<<ivector[5]<<endl<<ivector.size()<<endl;
for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历
return 0;
}

vector中存入结构体而且排序,不会自动排序

 #include<algorithm>
#include<vector>
#include<iostream>
using namespace std; typedef struct rect{
int id;
int length;
int width;
//重载<运算符
bool operator< (const rect &a) const{
if(id!=a.id)
return id<a.id;
else{
if(length!=a.length)
return length<a.length;
else
return width<a.width;
}
}
}Rect; int main(){
vector<Rect> vec;//vector存入结构体
//初始化
Rect rect;
rect.id=2;
rect.length=3;
rect.width=4;
//存入vector中
vec.push_back(rect); rect.id=1;
rect.length=2;
rect.width=3;
vec.push_back(rect);
//进行输出
vector<Rect>::iterator it=vec.begin();
cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;
sort(vec.begin(),vec.end());
cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl;
return 0;
}

vector中的查找

 #include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
//进行查找
vector<int>::iterator iter=find(vec.begin(),vec.end(),3);
if ( iter==vec.end())
cout << "Not found" << endl;
else
cout << "Found" << endl;
return 0;
}

vector中的删除

 #include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vector<int>::iterator iter=vec.begin();
for(;iter!=vec.end();){
if(*iter==3){
//这里注意返回是迭代器哦
iter=vec.erase(iter);
}else{
++iter;
}
}
for(iter=vec.begin();iter!=vec.end();iter++){
cout<<*iter<<" ";
}
return 0;
}

4 vector的内存管理与效率

关于STL容器,只要超过设置的最大值就会自动增长到足以容纳用户放进入的数据大小。

(1)内部采用动态数组方式实现。

(2)注意了,通过reverse申请特定大小的内存空间的时候总是按照指数边界来增大内部缓冲区。

当进行插入等操作的时候,如果内存不够用,这个时候会重新分配1.5-2倍的新内存空间,然后将内容复制过去。这个时候性能的确就会下降。

(3)使用“交换技巧”来修整vector过剩空间。也就是把它曾经最大的容量减少到它现在需要的容量。

vector<int>(ivec).swap(ivec).

(4)使用swap方法强行释放vector所占内存

例子

 #include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> iVec;
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*1个元素,容器容量为1*/
iVec.push_back(1);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*2个元素,容器容量为2*/
iVec.push_back(2);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*3个元素,容器容量为4*/
iVec.push_back(3);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*4个元素,容器容量为4*/
iVec.push_back(4);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*5个元素,容器容量为8*/
iVec.push_back(5);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*6个元素,容器容量为8*/
iVec.push_back(6);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*7个元素,容器容量为8*/
iVec.push_back(7);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*8个元素, 容器容量为8*/
iVec.push_back(8);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /*9个元素, 容器容量为16*/
iVec.push_back(9);
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; /* vs2005/8 容量增长不是翻倍的,如
9个元素 容量9
10个元素 容量13 */ /* 测试effective stl中的特殊的交换 swap() */
cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl;
vector<int>(iVec).swap(iVec); cout<<"临时的vector<int>对象的大小为:"<<(vector<int>(iVec)).size()<<endl;
cout<<"临时的vector<int>对象的容量为: " <<(vector<int>(iVec)).capacity()<<endl;
cout<<"交换后,当前vector的大小为:"<<iVec.size()<<endl;
cout<<"交换后,当前vector的容量为:"<< iVec.capacity()<<endl; return 0;
}

最后这里有点别扭,后面再看看。。。。加油骚年。。。。

c++中stl----vector的更多相关文章

  1. 转:用STL中的vector动态开辟二维数组

    用STL中的vector动态开辟二维数组 源代码:#include <iostream>#include <vector>using namespace std;int mai ...

  2. STL中的Vector相关用法

    STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int> ...

  3. (转)C++ STL中的vector的内存分配与释放

    C++ STL中的vector的内存分配与释放http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html 1.vector的内 ...

  4. C++STL中的vector的简单实用

    [原创] 使用C++STL中的vector, #include <stdio.h> #include<stdlib.h> #include<vector> usin ...

  5. STL中的vector实现邻接表

    /* STL中的vector实现邻接表 2014-4-2 08:28:45 */ #include <iostream> #include <vector> #include  ...

  6. 数据结构与算法(3)- C++ STL与java se中的vector

    声明:虽然本系列博客与具体的编程语言无关.但是本文作者对c++相对比较熟悉,其次是java,所以难免会有视角上的偏差.举例也大多是和这两门语言相关. 上一篇博客概念性的介绍了vector,我们有了大致 ...

  7. STL—Vector简介

    有关C++ STL 中的vector向量的用法(代码示例) 一. 简介 Vector是一个称为向量的顺序容器(不明白顺序容器与关联容器的可以Google). 二. 特点 1. 动态(相当于一个动态数组 ...

  8. C++ STL vector容器学习

    STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector, ...

  9. STL vector

    STL vector vector是线性容器,它的元素严格的按照线性序列排序,和动态数组很相似,和数组一样,它的元素存储在一块连续的存储空间中,这也意味着我们不仅可以使用迭代器(iterator)访问 ...

  10. STL vector用法介绍

    STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和f ...

随机推荐

  1. leetCode 104.Maximum Depth of Binary Tree(二叉树最大深度) 解题思路和方法

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  2. 微信热补丁 Tinker 的实践演进之路

    http://dev.qq.com/topic/57ad7a70eaed47bb2699e68e http://dev.qq.com/topic/57a30878ac3a1fb613dd40eb ht ...

  3. PE添加Style

       1. <style id="NumberStyle"> <setting> <param name="option"> ...

  4. ssh 保持连接

    ssh 保持连接 使用 ssh 登陆到云主机上,一段时间没有操作终端,会发现 ssh 连接断了,终端无响应. 配置 ssh 客户端,使其以一定间隔时间向 sshd 服务端发送心跳包,可解决此问题. / ...

  5. Ubuntu NDK配置与JNI demo

    NDK配置 1.下载最新版本NDK(android-ndk-r9d-linux-x86_64.tar.bz2) 下载网页:http://developer.android.com/tools/sdk/ ...

  6. 【BZOJ2729】[HNOI2012]排队 组合数

    [BZOJ2729][HNOI2012]排队 Description 某中学有 n 名男同学,m 名女同学和两名老师要排队参加体检.他们排成一条直线,并且任意两名女同学不能相邻,两名老师也不能相邻,那 ...

  7. EasyDarwin开源流媒体服务器提供的RTMP直播推送库

    EasyRTMP EasyRTMP是什么? EasyRTMP是一个EasyDarwin配套使用,也可以单独使用的RTMP推送库,通过EasyRTMP我们就可以避免接触到稍显复杂的RTMP推送流程,只需 ...

  8. from memory cache

    from memory cache

  9. 一款很好的日程安排插件fullcalendar 非常适合OA等系统

    1.插件下载 http://arshaw.com/fullcalendar/download/ 2. <!DOCTYPE html> <meta http-equiv="C ...

  10. Machine Learning in Action(2) 决策树算法

    决策树也是有监督机器学习方法. 电影<无耻混蛋>里有一幕游戏,在德军小酒馆里有几个人在玩20问题游戏,游戏规则是一个设迷者在纸牌中抽出一个目标(可以是人,也可以是物),而猜谜者可以提问题, ...