顺序容器vector的整理
2016-05-02 18:38
435 查看
vector是C++标准库里的一个容器,也是平时使用频率最高的容器,在这里对vector的一系列操作进行总结;
1. vector的初始化
2.vector支持的操作
以上是vector几乎所有的操作,每个操作后面都有对功能的基本注解,但仍然有以下几个点应该注意:
C++11支持用列表初始化vector;由此导致有些操作可以传入初始化列表;
push_back和emplace_back的区别在于,前者传递的引用必须和vector的元素类型(T)一致,而后者可以是能够隐式转化为T的其他类型;
v[i]可以用来访问元素,切记不可用来赋值;赋值可能会有意想不到的后果;
在像vector插入元素的时候,随着元素的增多,vector可能会出现元素的整体搬移,这个时候会出现迭代器失效的情况;在使用迭代器的时候需要注意;凡是涉及到改变vector的size的都应当引起注意;
小结
vector几乎是标准库除了string以外最常用的容器了,因此要熟练掌握它的每一个操作函数的使用。在整理的过程中会思考:操作函数的使用需要注意什么,同一个函数之间不同的重载版本之间的区别又是什么;将其整理下来,确实对vector的理解会更深。
参考引用
http://en.cppreference.com/w/cpp/container/vector
C++Primer 第五版
STL源码剖析
1. vector的初始化
vector<int> v1;//声明一个向量 vector<int> v2(5);//声明5个元素的向量,初始值不确定 vector<int> v3(5,1);//声明5个初始值为1的向量 vector<int> v4(v3);//拷贝赋值 vector<int> v5(v4.begin(),v4.end()); vector<int> v6(v4.begin(),v4.begin()+3);//用另一个序列的部分来初始化 vector<int> v7={1,2,3,4};//列表初始化,C++11支持
2.vector支持的操作
//返回迭代器 v.begin()/v.cbegin();//返回第一个元素的迭代器 v.rbegin()/v.crbegin(); v.end()/c.end();//返回最后一个元素之后的迭代器 v.rend()/c.crend(); //元素访问 v.front();//返回第一个元素 v.back();//返回最后一个元素 v[i]/v.at(i); //返回第i个元素,可能不存在; //赋值 void assign( size_type count, const T& value ); void assign( InputIt first, InputIt last ); void assign( std::initializer_list<T> ilist );//C++11支持 vector& operator=( const vector& other ); vector& operator=( vector&& other );//C++11支持 vector& operator=( std::initializer_list<T> ilist );//C++11支持 //容量 bool empty() const;//判断容器是否为空; size_type size() const;//返回vector的已有元素的数量; size_type max_size() const//返回系统能容纳元素的数量; void reserve(size_type new_cap );//为vector预留new_cap的空间大小 size_type capacity() const;//返回vector能容纳元素的数量 void shrink_to_fit();//移除没有使用的空间 C++11支持 //操作元素 void clear();//清除所有的元素,size变为0; void push_back( const T& value ); void push_back( T&& value );//C++11支持 **这里并不懂** void emplace_back( Args&&... args );//C++11支持 和push_back功能一样 iterator insert( iterator pos, const T& value ); iterator insert( const_iterator pos, const T& value ); iterator insert( const_iterator pos, T&& value );//C++11 iterator insert( const_iterator pos, size_type count, const T& value ); void insert( iterator pos, InputIt first, InputIt last); iterator insert( const_iterator pos, InputIt first, InputIt last );//在pos之前插入fisrt到last指向的序列,返回插入序列的第一个元素的迭代器,if first==last return pos; iterator insert( const_iterator pos, std::initializer_list<T> ilist );//可以插入初始化列别 C++11支持 void pop_back();删除最后一个元素 iterator erase( const_iterator pos );//删除pos指向的元素,返回下一个元素的迭代器 iterator erase( const_iterator first, const_iterator last );//删除区间,返回删除的序列后一个元素的迭代器; void resize( size_type count );//将vector调整为count的大小 void resize( size_type count, const value_type& value );//since C++11 void swap( vector& other );//和另外一个vector交换
以上是vector几乎所有的操作,每个操作后面都有对功能的基本注解,但仍然有以下几个点应该注意:
C++11支持用列表初始化vector;由此导致有些操作可以传入初始化列表;
push_back和emplace_back的区别在于,前者传递的引用必须和vector的元素类型(T)一致,而后者可以是能够隐式转化为T的其他类型;
v[i]可以用来访问元素,切记不可用来赋值;赋值可能会有意想不到的后果;
在像vector插入元素的时候,随着元素的增多,vector可能会出现元素的整体搬移,这个时候会出现迭代器失效的情况;在使用迭代器的时候需要注意;凡是涉及到改变vector的size的都应当引起注意;
小结
vector几乎是标准库除了string以外最常用的容器了,因此要熟练掌握它的每一个操作函数的使用。在整理的过程中会思考:操作函数的使用需要注意什么,同一个函数之间不同的重载版本之间的区别又是什么;将其整理下来,确实对vector的理解会更深。
参考引用
http://en.cppreference.com/w/cpp/container/vector
C++Primer 第五版
STL源码剖析
相关文章推荐
- JAVA学习总结四
- Objective和Swift,你该选择哪个
- 网线水晶头连接方法
- APK动态加载框架(DL)解析(一)
- SPSS——多元线性回归
- BZOJ 1191 超级英雄
- Javascript HTML5 Canvas实现的一个画板
- 基类型和引用类型的比较
- 2016.5.2
- 基于FPGA+USB2.0的图像采集系统测试小结-mt9m001
- spring boot 使用spring data jpa
- Matlab special usage : @ and Struct
- perl语言书籍教程推荐
- 朴素贝叶斯算法原理及实现
- 浪潮之巅阅读笔记二
- 高云的jQuery源码分析笔记
- usaco顺序的分数(随便搞,排序可以)和健康的赫斯坦奶牛(dfs)(水)
- iText 工具生产pdf文件
- 深入理解java类加载器ClassLoader
- 【BZOJ3998】【TJOI2015】 弦论 后缀自动机