vector, list, deque的区别和使用

vector和dequet提供了对元素的快速随机访问,但在任意位置插入或删除元素开销较大;
list 在任何位置都能快速插入和删除,但元素的随机访问开销更大
插入操作:
list,在任何位置可高效插入或删除一个元素。不需要移动任何元素。
vector, 除了尾部外,其他任何位置的插入或删除操作都要求移动右边所有的元素。
deque,和vector一样,在中间的插入或删除,效率比较低
选择容器的法则:
1) 如果程序要求随机访问元素,则应使用vector 或 deque
2) 如果程序要求中间插入或删除,则用list
3) 如果程序不是在中间位置,而是在容器的收部和尾部插入或删除元素,则应采用deque
4) 如果要求只能中间插入元素,然后需要随机访问元素。则应将元素读到list容器,然后对list重新排序,复制到vector容器

#include <vector>
#include <list>
#include <iostream>
using namespace std;

int main() {


	int ia[7] = { 0, 1, 2, 3, 4, 5, 6};   //定义数组
	
	vector<int> svec(ia, ia+6);      //初始化容器,值为数组第1个到第6个元素的副本
	//list<int> svec(ia+1, ia+8);

	cout << svec.size() << endl;    //容器的大小
	cout << svec.capacity() << endl;   //容器的容量
	for (int i = 0; i < svec.size(); i++) {
		
		cout << svec[i]  ;
			 
	}

	cout << "\n";
	svec.push_back(7);  //在尾部添加元素
	for (int i = 0; i < svec.size(); i++) {

		cout << svec[i]  ;

	}

	svec.pop_back();  //在尾部删除元素

	cout << "\n";
	vector<int>::iterator ite;     //定义一个迭代器
	for (ite = svec.begin(); ite != svec.end(); ite++) {
	
		cout << *ite << "";
	}

	cout << "\n";
	svec.insert(ite, 0);
	for (ite = svec.begin(); ite != svec.end(); ite++) {

		cout << *ite << "";
	}

	cout << "\n";
	ite = svec.begin() + 5;   //指向第6个元素
	svec.erase(ite);           //删除ite指向的这个元素
	for (ite = svec.begin(); ite != svec.end(); ite++) {

		cout << *ite << "";
	}

	cout << "\n";
	svec.clear();
	cout << svec.size() << endl;    

	int a;
	cin >> a ;
	return 1;
}
执行结果:


容器操作方法列举:


c.begin()    指向第一个元素
c.end()       指向最后一个元素的下一个位置
c.rbegin()   返回一个逆序迭代器,指向最后一个容器
c.rend()       返回一个逆序迭代器,指向第一个元素前面一个位置
c.back()   返回容器c的最后一个元素的引用
c.front()   返回容器c的第一个元素的引用
c[n]      返回下标为n的元素引用
c.at(n)      返回下标为n的元素引用
c.push_back(a)   在尾部添加值为a的元素
c.push_front(a)   在首部添加值 为a的元素
(只使用list,deque)
c.insert(p, a)  在迭代器p所指向元素前面插入值为a的新元素
c.insert(p, n, a) 在迭代器p所指向元素前面插入n个值为a的新元素
c.insert(p, b, e)  在迭代器p所指向元素前面插入由迭代器b和e标记的范围元素
c.erase(p)           删除迭代器p所指向的元素
c.erase(b, e)       删除迭代器b和e所标记的范围内的元素
c.clear()             删除所有元素
c.pop_back()      删除容器最后一个元素
c.pop_front()     删除容器第一个元素???????
c.size()  返回容器元素个数
c.max_size()   返回容器可容纳最多元素个数
c.empty()   是否为空
c.resize(n)   调整容器大小,使其容纳n个元素
c.resize(n, a)    调整容器大小,使其容纳n个值为a元素
c.capacity()  返回容器的容量

猜你喜欢

转载自blog.csdn.net/shy2794109/article/details/80833485