您的位置:首页 > 编程语言 > C语言/C++

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;
}


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

交换同类型的两个vector

ref:http://www.cplusplus.com/reference/vector/vector/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐