容器简单介绍

定义及初始化

vector<int> vec(5,100);
vector<string> strVec(10,"hello");

末尾插入元素

  vec.push_back(102);
strVec.push_back("what");

遍历 size() 函数是能够动态添加的

    for(vector<int>::size_type ix=0;ix<vec.size(); ix++)
{
cout<<vec[ix]<<endl;
vec.push_back(ix+10);
cout<<"size is"<<vec.size()<<endl;
if(vec.size()==10)
{
break;
}
}
for(vector<string>::size_type jx=0;jx<strVec.size();jx++)
{
cout<<strVec[jx]<<endl;
}

通过下标操作添加改变vector内容,不是安全的操作

vector <int> vec2(10);
cout<<vec2[9]<<endl;
cout<<vec2[10]<<endl;

仅能对已存在元素进行下标操作。不存在会crash

vector<int> emptyVec;
//cout<<emptyVec[0]<<endl; error

将元素一个容器复制给另外一个容器,类型必须匹配。容器类型和元素类型必须同样

    vector<int> vecCopy(vec);
for(vector<int>::size_type i=0;i<vecCopy.size();i++)
{
cout<<vecCopy[i]<<endl;
}

迭代器简单介绍

全部标准库容器都支持迭代器。但仅仅有少数的容器支持下标操作

定义

    vector<int>::iterator iter;

begin和end操作

begin返回迭代器指向的第一个位置,end指向vector的末端元素的下一个

vector<string>::iterator iBegin=strVec.begin();vector<string>::iterator iEnd=strVec.end();

迭代器的自增和解引用操作

++iter指向第二个元素

*iter指向当前元素

    cout<<*iBegin<<endl;
cout<<*(iEnd-1)<<endl;
for(;iBegin<iEnd;iBegin++)
{
cout<<*iBegin<<endl;
}

迭代器的算术操作

iter+n iter-n

iter1-iter2

    string str("richard");
*(iBegin+3)=str;
cout<<*(iBegin+3)<<endl;
cout<<iEnd-iBegin<<endl;
vector<string>::iterator
mid=iBegin+strVec.size()/2;
cout<<*mid<<endl ;

const_iterator 仅仅读

高级使用方法

容器元素类型必须满足例如以下两个约束

元素类型必须支持赋值运算

元素类型的对象必须能够复制

除了引用类型和IO标准库类型外。全部内置内置类型和复合类型都支持容器

顺序容器的操作

begin() 返回一个迭代器,指向容器的第一个元素

end()指向最后一个元素 。rbegin()逆序迭代器,指向容器的最后一个元素,rend()指向容器第一个元素前面位置

加入元素的操作

list,vector和dequeue支持例如以下操作

c.push_back(t); 在容器c末尾加入元素

list和dequeue 支持push_fron(t); 在容器c的最前面加入元素

 list<int> ilist;
for(size_t ix=0;ix<4;ix++){
ilist.push_front(ix);
}
for(list<int>::iterator iter=ilist.begin();iter!=ilist.end();iter++){
cout<<*iter<<endl;
}

insert操作实现一组更通用的方法,实如今容器内随意制定的位置插入新的元素

vector<string> strVec;
//第一种情况 。參数是位置和内容
strVec.insert(strVec.begin(),"yang"); //另外一种情况,參数是数量和内容
strVec.insert(strVec.begin(),1,"richard");
for(int i=0;i<strVec.size();i++){
// cout<<strVec[i]<<endl;
}
//第三种情况,參数是指针
string sarray[4]={"hello","world","hello","fat"};
strVec.insert(strVec.begin(),sarray+1,sarray+3);
for(i=0;i<strVec.size();i++){
cout<<strVec[i]<<endl;
}

避免存储end操作返回的迭代器

当向vector加入元素时,end失效,内存地址发生了改变,此时千万不用使用存储end操作的迭代器

关系运算符

比較的容器必须具有同样的容器类型,并且元素类型也必须同样

容器大小的操作

size()返回容器的长度

empty()标记容器大小是否为零

resize(n)调整容器大小,使其容纳n个元素。

font和back操作

font()返回容器的第一个元素

back()返回容器的最后一个元素

 vector<int> vec(5,10);
cout<<vec.front()<<endl;
vec.push_back(11);
cout<<vec.back()<<endl;

删除元素

1、pop_back()删除容器的最后一个元素。返回void

2、erase(p)删除迭代器p所指向的元素

3、erase(b,e)删除迭代器b和e所标记范围内全部的元素,返回一个迭代器,指向被删除元素段后面的元素。假设e本身就是指向末端的下一个位置的迭代器。则返回的迭代器也指向同样的位置

4、clear() 删除容器内的全部元素

 vector<int> vec(5,10);
cout<<vec.front()<<endl;
vec.push_back(11);
cout<<vec.back()<<endl;
vec.pop_back();
cout<<vec.size()<<endl;
vec.erase(vec.begin());
cout<<vec.size()<<endl;
vec.erase(vec.begin(),vec.end());
cout<<vec.size()<<endl;
vec.clear();
cout<<vec.size()<<endl;

capacity和reserve

capacity操作获取容器须要分配很多其它空间之前能够存储的元素总数,reserve操作则告诉vector应该预留多少个元素的存储空间

vector<int> vec(5,10);
for(int i=0; i<10; i++) {
vec.push_back(i);
}
cout<<vec.capacity()<<endl;
vector<int> vec2;
vec2.reserve(30);
cout<<vec2.capacity()<<endl;

vector容器经常用法的更多相关文章

  1. vector容器的用法

    转自一篇博客^-^: 1 基本操作 (1)头文件#include<vector>. (2)创建vector对象,vector<int> vec; (3)尾部插入数字:vec.p ...

  2. c++ vector容器基本用法

    基本用法 #include<iostream> #include<string> #include<vector> using namespace std; cla ...

  3. vector容器的用法以及动态数组

    vector容器不必去管大小 string申明的数组已经是动态的了 若是int类型的话,需要 cin>>N: int a[N]会出错 ,必须是int *p = new int[N] 然后再 ...

  4. (转载)C++STL中vector容器的用法

     vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vec ...

  5. 【C++】vector容器的用法

    检测vector容器是否为空: 1 #include <iostream> 2 #include <string> 3 #include <vector> 4 us ...

  6. Vector 容器简单介绍

    # Vector STL简要介绍 关于STL中的vector容器,以下做一些相关介绍. #### vector 简要概述 vector 称作向量类,属于容器类,实现了动态的数组,用于元素数量变化的对象 ...

  7. STL:vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  8. vector容器用法详解

    vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组.像数组一样,vector类也用从0开始的下标表示元素的位置:但和数组不同的是,当vector对象创建后,数组的元素个数会随着ve ...

  9. STL之二:vector容器用法详解

    转载于:http://blog.csdn.net/longshengguoji/article/details/8507394 vector类称作向量类,它实现了动态数组,用于元素数量变化的对象数组. ...

随机推荐

  1. WPF Binding

    winform有binding, WPF也有binding,区别在哪呢?这里暂时不提.以前也检查接触WPF binding, 但为什么过段时间就忘记了呢? 可能主要原因自己的知识体系不够完善吧,下面我 ...

  2. 页面添加 mask 遮罩层

    var mask = function(){ $('<div>').css({ position: 'fixed', left: 0, top: 0, width: '100%', hei ...

  3. 数据库备份工具mysqldump重要参数详解

    1. --single-transaction InnoDB 表在备份时,通常启用选项 --single-transaction 来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:RE ...

  4. Uncaught SyntaxError: Unexpected end of input

    js报错  原因:输入的意外终止…… 页面代码写的不规范啊……其中的某条语句,没有正常结束…… 或者部分语句“‘’”双引号,单引号没有配对好,被转义了之类的……错误造成的 代码: <script ...

  5. 超轻型响应jQuery旋转木马幻灯片插件anoSlide

    http://www.jqcool.net/demo/201409/jquery-anoslide/

  6. 好用的JQ图片特效jquery-poptrox-popup-galleries

    jQuery Poptrox – Popup galleries     Rate this (1 Vote) Download   Demo jQuery Poptrox Adds popup ga ...

  7. Spring事务管理中@Transactional的propagation参数

    所谓事务传播性,就是被调用者的事务与调用者的事务之间的关系.举例说明. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 //in A.java Class A {     @Tr ...

  8. 总结:ARM逻辑和高级C(朱老师物联网学习)

    开始学习朱老师物联网的视频是国庆节的那几天开始的,刚刚开始的时候是想自己在网上找一些嵌入式方面的视频资料,也找了很多的资料臂如“国嵌视频”“达内的视频”,之后也化了十几块钱在淘宝上面买了几十个G的视频 ...

  9. 利用花生壳在自己电脑上建立外网可访问的svn

    下载花生壳并注册账号 2.花生壳会送你一个免费的二级域名 3.登陆到路由器界面192.168.0.1或者192.168.0.0进入动态dns选项输入你的花生壳账号密码 4.在路由器设置界面设置转发规则 ...

  10. Fireworks Extension —— AutoSlice 介绍

    前不久在网上到处瞎晃的时候,发现Adobe的软件几乎都可以写插件.Fireworks更是很早的版本就支持使用javascript编写插件,于是乎如入桃园,奋斗几日为VD小伙伴们写了一个插件,命名Aut ...