vector和dequet提供了对元素的快速随机访问,但在任意位置插入或删除元素开销较大;
list 在任何位置都能快速插入和删除,但元素的随机访问开销更大
list 在任何位置都能快速插入和删除,但元素的随机访问开销更大
插入操作:
list,在任何位置可高效插入或删除一个元素。不需要移动任何元素。
vector, 除了尾部外,其他任何位置的插入或删除操作都要求移动右边所有的元素。
deque,和vector一样,在中间的插入或删除,效率比较低
选择容器的法则:
1) 如果程序要求随机访问元素,则应使用vector 或 deque
2) 如果程序要求中间插入或删除,则用list
3) 如果程序不是在中间位置,而是在容器的收部和尾部插入或删除元素,则应采用deque
4) 如果要求只能中间插入元素,然后需要随机访问元素。则应将元素读到list容器,然后对list重新排序,复制到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.end() 指向最后一个元素的下一个位置
c.rbegin() 返回一个逆序迭代器,指向最后一个容器
c.rend() 返回一个逆序迭代器,指向第一个元素前面一个位置
c.back() 返回容器c的最后一个元素的引用
c.front() 返回容器c的第一个元素的引用
c[n] 返回下标为n的元素引用
c.at(n) 返回下标为n的元素引用
c.front() 返回容器c的第一个元素的引用
c[n] 返回下标为n的元素引用
c.at(n) 返回下标为n的元素引用
c.push_back(a) 在尾部添加值为a的元素
c.push_front(a) 在首部添加值 为a的元素
(只使用list,deque)
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.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.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.max_size() 返回容器可容纳最多元素个数
c.empty() 是否为空
c.resize(n) 调整容器大小,使其容纳n个元素
c.resize(n, a) 调整容器大小,使其容纳n个值为a元素
c.capacity() 返回容器的容量