C++(STL)考点--容器(vector)
2017-03-27 15:15
316 查看
1 构造函数
default (1) explicit vector (const allocator_type& alloc = allocator_type()); fill (2) explicit vector (size_type n); vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type()); range (3) template <class InputIterator> vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type()); copy (4) vector (const vector& x); vector (const vector& x, const allocator_type& alloc); move (5) vector (vector&& x); vector (vector&& x, const allocator_type& alloc); initializer list (6) vector (initializer_list<value_type> il, const allocator_type& alloc = allocator_type());
// constructing vectors #include <iostream> #include <vector> int main () { // constructors used in the same order as described above: std::vector<int> first; // empty vector of ints std::vector<int> second (4,100); // four ints with value 100 std::vector<int> third (second.begin(),second.end()); // iterating through second std::vector<int> fourth (third); // a copy of third // the iterator constructor can also be used to construct from arrays: int myints[] = {16,2,77,29}; std::vector<int> fifth (myints, myints + sizeof(myints) / sizeof(int) ); std::cout << "The contents of fifth are:"; for (std::vector<int>::iterator it = fifth.begin(); it != fifth.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; }
2 assign/ operator=
赋值运算void assign (initializer_list<value_type> il); // vector assign #include <iostream> #include <vector> int main () { std::vector<int> first; std::vector<int> second; std::vector<int> third; first.assign (7,100); // 7 ints with a value of 100 std::vector<int>::iterator it; it=first.begin()+1; second.assign (it,first.end()-1); // the 5 central values of first int myints[] = {1776,7,4}; third.assign (myints,myints+3); // assigning from array. std::cout << "Size of first: " << int (first.size()) << '\n'; std::cout << "Size of second: " << int (second.size()) << '\n'; std::cout << "Size of third: " << int (third.size()) << '\n'; return 0; }
3 at/operator[ ]
vec.at(n) /vec取vec在位置n处的元素
at()提供了越界检查的功能,使用起来更安全,同时比起operator[]来代价也更大。
4 front/back
vec.front():取vec的第一个元素back与front相对应,vec.back() :取vec最后一个元素
5 begin/end/cbegin/cend/crbegin/crend/[b]rbegin/rend[/b]
vec.begin()返回指向vec第一个元素的迭代器,end与begin相对应,vec.end()返回指向vec最后一个元素下一个位置的迭代器。注意与front/back的区别:一个是直接指向vec内的元素,一个是指向vec的迭代器。若想通过end访问末尾元素,必须使iter-1。
cbegin/cend:与begin/end用法类似,返回const_iterator类型迭代器【注意const迭代器和
const_iterator的区别】,crbegin/crend与之对应,迭代器元素取反。
rbegin/rend:与begin/end用法类似,迭代器反向取元素 。
#include <iostream> #include <vector> using namespace std; int main () { vector<int> myvector; for (int i=1; i<=5; i++) myvector.push_back(i); cout<<"首元素:"<<myvector.front()<<"\t"<<"尾元素:"<<myvector.back()<<endl; vector<int>::iterator itbegin = myvector.begin(); vector<int>::iterator itend = myvector.end(); cout<<"首元素:"<<*itbegin<<"\t"<<"尾元素:"<<*(--itend)<<endl; return 0; }
6 size/resize/max_size/capacity/reserve
Size指目前容器中实际有多少元素,对应的resize(size_type)会在容器尾添加或删除一些元素,来调整容器中实际的内容,使容器达到指定的大小。Capacity指最少要多少元素才会使其容量重新分配,对应reserve(size_type new_size)会这置这个capacity值,使它不小于所指定的new_size。
Max_size:容器所能容纳的最大数目的元素个数。
一般关系:
用reserve(size_type)只是扩大capacity值,这些内存空间可能还是“野”的,如果此时使用“[
]”来访问,则可能会越界。而resize(size_type new_size)会真正使容器具有new_size个对象。
reserve()只能扩展容器的capacity,不会在其中加入元素。对于reserve()扩展的空间,可以使用push_back(constT&)来填入对象。
ref: http://blog.163.com/jxguo_05/blog/static/719401002010102523831645/
7 push_back/pop_back/emplace/emplace_back/insert/erase/clear
注意push_back/pop_back/emplace/emplace_back之间的区别#include <iostream> #include <vector> using namespace std; int main(void) { //int myint[5] = {1,2,3,4,5}; //vector<int> myvector(myint, myint+sizeof(myint)/sizeof(int)) //vector<int> myvector2(myvector.begin(), myvector.end()-1); //push_back:在vector末尾添加元素 vector<int> myvector; for (int i=0;i<20;i++) { myvector.push_back(i); } cout << "-----------------push_back---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //pop_back:在vector末尾删除元素 for (int i=0;i<5;i++) { myvector.pop_back(); } cout << "-----------------pop_back---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //insert:插入元素 vector<int>::iterator it; it = myvector.begin(); //插入单个元素,位置可选 myvector.insert(it,100); cout << "-----------------插入单个元素---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //插入多个元素 myvector.insert(it,2,200); cout << "-----------------插入多个元素---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //插入另一个vector it = myvector.begin(); vector<int> anothervect(2,500); myvector.insert(it,anothervect.begin(),anothervect.end()); cout << "-----------------插入另一个vetor---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //插入一个数组 it = myvector.begin(); int myint[5] = {60,61,62,63,64}; myvector.insert(it, myint, myint+5); cout << "-----------------插入一个数组---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //erase:删除特定位置元素 myvector.erase(myvector.begin()+5); cout << "-----------------删除某个元素---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //erase:删除某区间元素 myvector.erase(myvector.begin(),myvector.begin()+5); cout << "-----------------删除区间元素---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } //clear:清空vector myvector.clear(); cout << "-----------------清空vector---------------" << endl; for (vector<int>::iterator it = myvector.begin();it != myvector.end();++it) { cout << *it << endl; } return 0; }
8 data
返回指向容器内部用于存储自身元素的数组的直接指针。int main () { std::vector<int> myvector (5); int* p = myvector.data(); *p = 10; ++p; *p = 20; p[2] = 100;//指向myvector第三个元素 std::cout << "myvector contains:"; for (unsigned i=0; i<myvector.size(); ++i) std::cout << ' ' << myvector[i]; std::cout << '\n'; return 0; }
9 empty
判断vector是否为空10 swap
交换同类型的两个vectorref:http://www.cplusplus.com/reference/vector/vector/
相关文章推荐
- C++STL容器技术之Vector
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C++ STL 提供了3个序列容器 :vector, deque, list
- C++STL中vector容器 begin()与end()函数、front()与back()的用法
- 初学者学习C++STL之vector容器
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL--vector向量容器学习笔记
- 【C++ STL】序列式容器Vector
- C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- (转载)C++STL中vector容器的用法
- C++STL泛型编程——vector向量容器
- vector容器类的使用[c++ stl]
- c++的STL模板库中3种容器类:vector,list,deque的比较
- [转贴]从零开始学C++之STL(二):实现一个简单容器模板类Vec(模仿VC6.0 中 vector 的实现、vector 的容量capacity 增长问题)
- [置顶] 从零开始学C++之STL(二):实现简单容器模板类Vec(vector capacity 增长问题、allocator 内存分配器)
- 【转】c++中Vector等STL容器的自定义排序
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++STL中vector容器 begin()与end()函数、front()与back()的用法