STL学习2——序列容器
2016-10-19 19:06
197 查看
三种:vector,list,queue
基础:数组,链表,数组
支持函数:front,back,push_back,pop_back
vector就像数组一样,是连续的。在末尾插入非常高效,中间就不行。
要想经常在两端插入删除,最好用queue,它比vector好。
有对vector操作的函数也有它对应的迭代器。
1.vector和迭代器
1.size和capacity用法:
原因:size是当前存放元素个数;capacity是成倍增长的,如:1,2,4,8,16,32…..这回造成空间浪费。所以,一般都手动初始化一个较大的容量。用resize和reserve控制空间。
2.使用迭代器遍历
3.使用迭代器反向遍历
以上的iterator,const_iterator,const_reverse_iterator都属于常用的迭代器,一般的容器中都有这些。
2.操作vector的函数
1.初始化vector元素
指向数组的指针可以作为迭代器,实参是两个迭代器,从arry开始,到arry+size范围内所有元素(最后一个不包含)
2.copy函数和ostream_iterator迭代器输出
定义输出迭代器对象output,它只输出int型变量,构造函数第一个实参指定输出流,第二个参数指定出输出值的分隔符;
copy过程,从第一个迭代器指定位置开始,到第二个结束(不包括那个位置的),把这些位置的元素都复制到后一个实参的输出迭代器中。
3.front,back函数以及begin,end函数
front函数返回vector中第一个元素的引用;
begin函数返回一个随机访问迭代器,指向vector中第一个元素;
4.at函数
下标访问的功能,同时判断是否超出边界,若超出边界,at函数会抛出out_of_bounds异常。
5.insert函数
把第二个实参插到第一个实参中指定位置元素之前。
这里的迭代器指向vector的第二个元素,因此22就变成第二个元素了,其他的往后串。
6.erase函数
删除指定位置的元素,或者指定一段的元素
基础:数组,链表,数组
支持函数:front,back,push_back,pop_back
vector
可以动态的改变它的大小,可以彼此赋值,但数组表示地址常量就没这功能。vector就像数组一样,是连续的。在末尾插入非常高效,中间就不行。
要想经常在两端插入删除,最好用queue,它比vector好。
有对vector操作的函数也有它对应的迭代器。
1.vector和迭代器
1.size和capacity用法:
vector<int> integers; cout << integers.size() << endl;//0 cout << integers.capacity() << endl;//0 integers.push_back(1); integers.push_back(2); integers.push_back(4); cout << integers.size() << endl;//3 cout << integers.capacity() << endl;//4
原因:size是当前存放元素个数;capacity是成倍增长的,如:1,2,4,8,16,32…..这回造成空间浪费。所以,一般都手动初始化一个较大的容量。用resize和reserve控制空间。
2.使用迭代器遍历
#include<iterator> #include<vector> using namespace std; template <typename T> void printVector(const vector<T> &); ---------- main: { vector<int> integers; integers.push_back(1); integers.push_back(2); integers.push_back(4); printVector(integers);//调用迭代器输出函数 cout << endl; } ---------- template<typename T> void printVector(const vector<T> & interges) { typename vector<T>::const_iterator constIterator;//定义一个常量迭代器,迭代vector<int>这个对象,并输出它的内容,const是使它不可以修改元素 for (constIterator = interges.begin(); constIterator != interges.end(); ++constIterator) { cout << *constIterator; } }//interges.begin()的返回值是一个迭代器(相当于指针)
3.使用迭代器反向遍历
#include<iterator> #include<vector> using namespace std; template <typename T> void RprintVector(const vector<T> &); ---------- main: { vector<int> integers; integers.push_back(1); integers.push_back(2); integers.push_back(4); RprintVector(integers); cout << endl; } ---------- template<typename T> void RprintVector(const vector<T> & interges) { typename vector<T>::const_reverse_iterator rconstIterator;//const_reverse_iterator 反向迭代器 for (rconstIterator = interges.rbegin(); rconstIterator != interges.rend(); ++rconstIterator)//rbegin,rend { cout << *rconstIterator; } }
以上的iterator,const_iterator,const_reverse_iterator都属于常用的迭代器,一般的容器中都有这些。
2.操作vector的函数
1.初始化vector元素
指向数组的指针可以作为迭代器,实参是两个迭代器,从arry开始,到arry+size范围内所有元素(最后一个不包含)
int size=6; int arry[size]={1,2,3,4,5,6}; vector<int> interges(arry,size+arry); vector<int> interges={1,2,3};//初始化为1,2,3 vector<int> interges1(interges);//拷贝 vector<int> interges(10);//生成一个向量,且里有10个数,且初值为0; vector<int> interges[10];//生成10组向量,每个向量的size为0
2.copy函数和ostream_iterator迭代器输出
定义输出迭代器对象output,它只输出int型变量,构造函数第一个实参指定输出流,第二个参数指定出输出值的分隔符;
copy过程,从第一个迭代器指定位置开始,到第二个结束(不包括那个位置的),把这些位置的元素都复制到后一个实参的输出迭代器中。
ostream_iterator<int> output(cout,' ');//ostream_iterator在头文件<iterator>中,output这个对象连接到了cout copy(interges.begin(),interges.end(),output);//包含在<algorithm>中
3.front,back函数以及begin,end函数
front函数返回vector中第一个元素的引用;
begin函数返回一个随机访问迭代器,指向vector中第一个元素;
cout<<*interges.begin(); cout<<interges.front();
4.at函数
下标访问的功能,同时判断是否超出边界,若超出边界,at函数会抛出out_of_bounds异常。
integers.at(10);//这个异常在头文件<stdexpect>中。
5.insert函数
把第二个实参插到第一个实参中指定位置元素之前。
这里的迭代器指向vector的第二个元素,因此22就变成第二个元素了,其他的往后串。
integers.insert(interges.begin()+1,22);
6.erase函数
删除指定位置的元素,或者指定一段的元素
intergers.erase(integers.begin()); intergers.erase(integers.begin(),integers.end());
list
deque
相关文章推荐
- STL学习系列之三——list序列容器
- STL学习系列之四——deque序列容器
- STL序列容器vector、deque、list和array学习笔记
- STL学习系列之二——序列容器(vector)
- STL学习系列之二——序列容器(vector)
- C++ STL学习笔记四 list双向链表容器
- STL中容器的类型和基本特征——《c++ primer plus第五版》学习小结(转)
- STL序列容器的存储连续性
- stl基本容器学习1
- STL概览-序列容器vector,deque,list
- 标准模板库(STL)学习探究之vector容器
- 标准模板库(STL)学习探究之bitset容器
- 标准模板库(STL)学习之List容器___1
- [C++再学习系列] 函数声明与STL容器构造
- [C++再学习系列] STL容器删除操作总结
- 标准模板库(STL)学习探究之Multimap容器
- STL容器--学习笔记
- 标准模板库(STL)学习指南之List容器
- 标准模板库(STL)学习之List容器___2
- 标准模板库(STL)学习探究之Stack容器