1 vector是啥玩意
(1)可以使用下标访问个别的元素
(2)迭代器可以按照不同的方式遍历
(3)可以在容器的末尾增加或者删除元素
2 容器大小和容器的容量区别
(1)大小是元素的个数,容量是分配的内存大小。vector::size()容器的大小 vecto::capacity返回容器值。
(2)每次重新分配内存都会影响程序的性能,所以一般分配的容量都打羽容器的大小。
3 vector中各种初始化方法
#include
#include
using namespace std;
int main(){
int a[7]={1,2,3,4,5,6,7};
vector
初始化方式vector
vector
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
#include
#include
using namespace std;
void print(int n)
{
cout<<n<<" ";
}
int main(){
int a[7]={1,2,3,4,5,6,7};
vector
vector
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
#include
#include
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 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
#include
#include
using namespace std;
int main(){
vector
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
//进行查找
vector
if ( iter==vec.end())
cout << "Not found" << endl;
else
cout << "Found" << endl;
return 0;
}
vector中的删除
#include
#include
#include
using namespace std;
int main(){
vector
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
vec.push_back(4);
vec.push_back(5);
vector
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
(4)使用swap方法强行释放vector所占内存
例子
#include
#include
using namespace std;
int main(){
vector
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;
}
最后这里有点别扭,后面再看看。。。。加油骚年。。。。
手机扫一扫
移动阅读更方便
你可能感兴趣的文章