C++(STL)考点--容器(vector)

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


at/operator[ ]

vec.at(n) /vec[n]

取vec在位置n处的元素
at() 提供了越界检查的功能,使用起来更安全,同时比起 operator[] 来代价也更大。


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


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/




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老A的AI实验室

给博主点一杯卡布奇诺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值