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[n]
取vec在位置n处的元素at() 提供了越界检查的功能,使用起来更安全,同时比起 operator[] 来代价也更大。
4 front/back
vec.front():取vec的第一个元素
back与front相对应,vec.back() :取vec最后一个元素
5 begin/end/cbegin/cend/crbegin/crend/rbegin/rend
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
交换同类型的两个vector
ref:http://www.cplusplus.com/reference/vector/vector/