//在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少
基本概念
vector容器是一个模板类,可以存放任何类型的对象)。vector对象可以在运行时高效地添加元素,并且vector中元素是连续存储的。
1、定义和初始化
* vector< 类型名 > 标识符 (n) //定义容器大小为n
* vector< 类型名 > 标识符(最大容量,初始所有值);
eg: vector< int > ivec( 10, -1 ); 定义了 ivec 它包含十个int型的元素 每个元素都被初始化为-1
* vector<类型名> vector<typeName>v2(v1); 或v2=v1;或vector<typeName> v2(v1.begin(), v1.end());
//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被扩充为v1.size()。
* 拷贝数组中的元素:int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
// 把 ia 的 6 个元素拷贝到 ivec 中 vector< int > ivec( a, a+6 );
// 拷贝 3 个元素 a[2], a[3], a[4] vector< int > ivec( &a[ 2 ], &a[ 5 ] ); //注意第二个指正要指到末尾元素的下一个元素
以下是事例:
1 #include2 #include 3 using namespace std; 4 int main(){ 5 int a[ 6 ] = { -2, -1, 0, 1, 2, 1024 }; 6 //拷贝数组中的元素 7 vector< int > vec1( a, a+6 ); 8 cout< <<' '< <<' '< <<' '< < vec( &a[ 2 ], &a[5] );13 cout< <<' '< <<' '< <<' '< < newone;17 newone = vec;18 cout< <
常用方法
c.clear() 移除容器中所有数据。
c.empty() 判断容器是否为空。
c.erase(pos) 删除pos位置的数据
c.erase(beg,end) 删除[beg,end)区间的数据
c.front() 传回第一个数据。
c.insert(pos,elem) 在pos位置插入一个elem拷贝
c.pop_back() 删除最后一个数据。
c.push_back(elem) 在尾部加入一个数据。
c.resize(num) 重新设置该容器的大小
c.size() 返回容器中实际数据的个数。
c.begin() 返回指向容器第一个元素的迭代器
c.end() 返回指向容器最后一个元素的迭代器
使用迭代器
迭代器:迭代器是个所谓的智能指针,具有遍历复杂数据结构的能力,就看做是容器的专用指针吧,用容器时一般都要使用到这个,那种用数组索引的方法反而更加少用了,下面是一个简单的使用迭代器的示例:
1 //利用迭代器更改容器中的某一个值 2 #include3 #include 4 using namespace std; 5 int main(){ 6 vector abc; 7 abc.push_back(1); //push几个值进去 8 abc.push_back(5); 9 abc.push_back(3); 10 abc.push_back(4);11 12 // 迭代器遍历寻遍13 for(vector ::iterator it = abc.begin();it!=abc.end();)14 {15 if(*it ==4)16 it = abc.erase(it);17 else18 ++it;19 }20 cout << "After remove 5:\n";21 for(vector ::iterator i = abc.begin(); i < abc.end(); ++i)22 {23 cout << * i << " ";24 }25 cout << endl;26 return 0;27 }
以下是一些简单的程序:
定义一个二维数组
1 #include2 #include 3 using namespace std; 4 int main(){ 5 int i = 0,j = 0; //容器内部的容器 6 //Array 是10行,且都为0 7 vector< vector > Array(10,vector (0)); 8 9 for(j = 0; j < 10; j++)10 {11 for (i = 0; i < 9; i++)12 {13 Array[j].push_back(i);14 }15 }16 //输出17 for( j = 0; j < 10; j++ )18 {19 for(i = 0; i
排序与逆向
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 int main(){ 7 vector num; 8 int element; 9 while(cin>>element)10 num.push_back(element);11 12 sort(num.begin(),num.end()); //从大到小排序13 14 reverse(num.begin(),num.end()); //逆向输出15 16 for(int i = 0;i
定义二维动态数组
1 #include2 #include 3 using namespace std; 4 int main(){ 5 int i = 0,j = 0; 6 vector > Array; 7 vector line; 8 for(j = 0;j < 20;j++){ 9 Array.push_back(line); //要对每一个vector初始化,初始化列。10 for (i = 0; i < 9; i++ )11 {12 Array[ j ].push_back( i );13 }14 }15 16 for(j = 0;j < 10;j++ )17 {18 for(i = 0; i
参考: