1 vector是啥玩意ios
(1)可使用下标访问个别的元素数组
(2)迭代器能够按照不一样的方式遍历ide
(3)能够在容器的末尾增长或者删除元素性能
2 容器大小和容器的容量区别测试
(1)大小是元素的个数,容量是分配的内存大小。vector::size()容器的大小 vecto::capacity返回容器值。spa
(2)每次从新分配内存都会影响程序的性能,因此通常分配的容量都打羽容器的大小。code
3 vector中各类初始化方法对象
1 #include <vector> 2 #include <iostream> 3 using namespace std; 4 int main(){ 5 int a[7]={1,2,3,4,5,6,7}; 6 vector<int> ivector(a,a+7);/*vector的赋值并不能够像数组同样方便的用花括号方便 的完成赋值,这里借用了数组来初始化这个vector 7 初始化方式vector<elementType> intvec(begin,end);这样能够用起来看上去仍是比较习惯的。*/ 8 vector<int>::iterator iter; 9 for (iter=ivector.begin();iter!=ivector.end();iter++){ 10 cout<<*iter<<" "; 11 } 12 cout<<endl; 13 ivector[5]=1; 14 /*单个vector的赋值,这个方式看上去仍是和数组同样的 15 也能够这么写ivector.at(5)=1;可是就是不习惯 */ 16 cout<<ivector[5]<<endl<<ivector.size()<<endl; 17 for (iter=ivector.begin();iter!=ivector.end();iter++){ 18 cout<<*iter<<" "; 19 } 20 cout<<endl; 21 for(int i=0;i<5;i++){ 22 cout<<ivector[i]<<" "; 23 } 24 cout<<endl; 25 return 0; 26 }
foreach用法:blog
1 #include <vector> 2 #include <algorithm> 3 #include <iostream> 4 using namespace std; 5 6 void print(int n) 7 { 8 cout<<n<<" "; 9 } 10 11 int main(){ 12 int a[7]={1,2,3,4,5,6,7}; 13 vector<int> ivector(a,a+7); 14 vector<int>::iterator iter; 15 for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历 16 cout<<endl; 17 ivector[5]=1; 18 cout<<ivector[5]<<endl<<ivector.size()<<endl; 19 for_each(ivector.begin(),ivector.end(),print);//用for_each进行遍历 20 return 0; 21 }
vector中存入结构体并且排序,不会自动排序排序
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 6 typedef struct rect{ 7 int id; 8 int length; 9 int width; 10 //重载<运算符 11 bool operator< (const rect &a) const{ 12 if(id!=a.id) 13 return id<a.id; 14 else{ 15 if(length!=a.length) 16 return length<a.length; 17 else 18 return width<a.width; 19 } 20 } 21 }Rect; 22 23 int main(){ 24 vector<Rect> vec;//vector存入结构体 25 //初始化 26 Rect rect; 27 rect.id=2; 28 rect.length=3; 29 rect.width=4; 30 //存入vector中 31 vec.push_back(rect); 32 33 rect.id=1; 34 rect.length=2; 35 rect.width=3; 36 vec.push_back(rect); 37 //进行输出 38 vector<Rect>::iterator it=vec.begin(); 39 cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; 40 sort(vec.begin(),vec.end()); 41 cout<<(*it).id<<' '<<(*it).length<<' '<<(*it).width<<endl; 42 return 0; 43 }
vector中的查找
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 vector<int> vec; 7 vec.push_back(1); 8 vec.push_back(2); 9 vec.push_back(3); 10 vec.push_back(4); 11 vec.push_back(5); 12 //进行查找 13 vector<int>::iterator iter=find(vec.begin(),vec.end(),3); 14 if ( iter==vec.end()) 15 cout << "Not found" << endl; 16 else 17 cout << "Found" << endl; 18 return 0; 19 }
vector中的删除
1 #include<algorithm> 2 #include<vector> 3 #include<iostream> 4 using namespace std; 5 int main(){ 6 vector<int> vec; 7 vec.push_back(1); 8 vec.push_back(2); 9 vec.push_back(3); 10 vec.push_back(4); 11 vec.push_back(5); 12 vector<int>::iterator iter=vec.begin(); 13 for(;iter!=vec.end();){ 14 if(*iter==3){ 15 //这里注意返回是迭代器哦 16 iter=vec.erase(iter); 17 }else{ 18 ++iter; 19 } 20 } 21 for(iter=vec.begin();iter!=vec.end();iter++){ 22 cout<<*iter<<" "; 23 } 24 return 0; 25 }
4 vector的内存管理与效率
关于STL容器,只要超过设置的最大值就会自动增加到足以容纳用户放进入的数据大小。
(1)内部采用动态数组方式实现。
(2)注意了,经过reverse申请特定大小的内存空间的时候老是按照指数边界来增大内部缓冲区。
当进行插入等操做的时候,若是内存不够用,这个时候会从新分配1.5-2倍的新内存空间,而后将内容复制过去。这个时候性能的确就会降低。
(3)使用“交换技巧”来修整vector过剩空间。也就是把它曾经最大的容量减小到它如今须要的容量。
vector<int>(ivec).swap(ivec).
(4)使用swap方法强行释放vector所占内存
例子
1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 int main(){ 5 vector<int> iVec; 6 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 7 8 /*1个元素,容器容量为1*/ 9 iVec.push_back(1); 10 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 11 12 /*2个元素,容器容量为2*/ 13 iVec.push_back(2); 14 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 15 16 /*3个元素,容器容量为4*/ 17 iVec.push_back(3); 18 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 19 20 /*4个元素,容器容量为4*/ 21 iVec.push_back(4); 22 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 23 24 /*5个元素,容器容量为8*/ 25 iVec.push_back(5); 26 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 27 28 /*6个元素,容器容量为8*/ 29 iVec.push_back(6); 30 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 31 32 /*7个元素,容器容量为8*/ 33 iVec.push_back(7); 34 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 35 36 /*8个元素, 容器容量为8*/ 37 iVec.push_back(8); 38 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 39 40 /*9个元素, 容器容量为16*/ 41 iVec.push_back(9); 42 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 43 44 /* vs2005/8 容量增加不是翻倍的,如 45 9个元素 容量9 46 10个元素 容量13 */ 47 48 /* 测试effective stl中的特殊的交换 swap() */ 49 cout<<"容器大小:"<<iVec.size()<<"容量:"<<iVec.capacity()<<endl; 50 vector<int>(iVec).swap(iVec); 51 52 cout<<"临时的vector<int>对象的大小为:"<<(vector<int>(iVec)).size()<<endl; 53 cout<<"临时的vector<int>对象的容量为: " <<(vector<int>(iVec)).capacity()<<endl; 54 cout<<"交换后,当前vector的大小为:"<<iVec.size()<<endl; 55 cout<<"交换后,当前vector的容量为:"<< iVec.capacity()<<endl; 56 57 return 0; 58 }
最后这里有点别扭,后面再看看。。。。加油骚年。。。。