顺序容器:
vector:数组
list:链表
deque:双端数组
顺序容器适配器:
stack:堆栈
queue:队列
priority_queue:优先级队列
deque是一个动态数组
deque与vector非常类似;
deque可以在在数组开头和末尾插入和删除数据;
1 #include <deque> 2 #include <algorithm> 3 4 deque<int>::iterator iElemetnLocater; 5 for(iElementLocater a.begin(); 6 iElementLocater != a.end(); 7 ++iElemetLocater){ 8 //distance函数 9 size_t nOffert = distance(a.begin(), iElementLocater); 10 cout << "a["<<nOffset<<"]" <<*iElementLocater << endl; 11 12 }
list 类模板:
vector向量只能在末尾插入数据;
deque可以在开头和末尾拆入;
顺序容器 STL list类(双向链表)
list是一个模板类;
在list开头插入元素;
在list末尾插入元素;
在list中间插入元素;
删除list中的元素;
对list中元素进行反转和排序;
1 #include <iostream> 2 #include <list> 3 4 using namespace std; 5 6 int main() 7 { 8 std::list<int> a; 9 std::list<list>::iterator iter; 10 11 a.push_front(4); //头插 12 a.push_front(3); 13 a.push_front(2); 14 a.push_front(1); 15 a.push_back(5); //尾插 16 17 iter = a.begin(); 18 ++iter; 19 a.insert(iter, 10); //通过迭代器位置的改变来插入数据; 20 //在末尾拆入4个20 21 a.insert(a.end(), 4, 20) 22 23 24 for(std::list<int>::iterator it=a.begin(); 25 it!=a.end();it++){ 26 std::cout << *it << std::endl; 27 } 28 return 0; 29 } 30
1 #include <vector> 2 #include <list> 3 #include <deque> 4 5 using namespace std; 6 7 int main() 8 { 9 vector<string> s_vec; 10 s_vec.push_back("hello"); 11 s_vec.push_back("c++"); 12 s_vec.push_back("STL"); 13 14 //利用迭代器,vector初始化list 15 list<string> slist(s_vec.begin(), s_vec.end()); 16 17 const list<int>::size_type list_size =64; 18 list<string> slist(list_size, "hello"; 19 20 list<int> I_list; 21 22 vector<int> ivec; //默认构造函数 23 ivec.push_back(1); 24 ivec.push_back(2); 25 ivec.push_back(3); 26 27 vector<int> ivec2(ivec); //使用ivec初始化ivec2; 28 vector<int> ivec2(ivec); //使用ivec初始化ivec2; 29 30 char *words[] = {"stately", "plump", "buck"}; 31 size_t words_size = sizeof(words)/sizeof(char*); 32 33 //利用指针 数组初始化list容器 34 list<string> words(words, words+words_size): 35 36 const list<int>::size_type list_size = 64; 37 list<string> slist(list_size, "hello"); //list里面64个hello; 38 list<int> ilist(list_size); //ilist默认64个0; 39 40 vector<Foo> a; //不进行初始化,不用调用Foo的构造函数; 41 vector<Foo> b(10, 1); //进行了初始化,而且调用的是带参数的构造函数; 42 43 vector<vector<string> > lines; //vector里面存放vector 44 list<vector<string> > list_lines; //list里面存放vector 45 46 //list<int> ilist(ivec); //Error; 47 return 0; 48 }