【C++ Primer Chapter 9 总结】顺序容器 & 容器适配器

Sequential Containers
  • vector
  • deque(双端对列)
  • list(链表)
  • string
  • array(替代内置数组)
  • forward_list(单链表)
Sequential Containers Adaptors
  • stack
  • queue
  • priority_queue
 
1.容器是类模板,要提供元素类型。
vector<int> v;
list<TreeNode*> lst;
 
2.迭代器Iterator。[begin, end)表示容器中所有元素。
容器的类型成员:size_type, iterator, const_iterator, reverse_iterator,const_reverse_iterator。
反向迭代器,反向遍历容器。与正向迭代器相比,各种操作的含义发生了颠倒。
vector<int>::iterator it;   // iterator是类型别名
vector<int> v;
v.begin();  // 容器第一个元素
v.end();   //最后一个元素的后一个元素
 
 
vector<string> v = {"hello", "C++", "world"};
auto rit = v.rbegin();   // vector<string>::reverse_iterator, 反向迭代器,容器的从右边开始的第一个元素
auto cit = v.cbegin();             // vector<int>::const_iterator, 容器的从右边开始的第一个元素,不能通过迭代器改变容器元素
auto crit = v.rbegin();   // vector<int>::const_reverse_iterator, 容器的从右边开始的第一个元素,不能通过迭代器改变容器元素

sort(vec.begin(), vec.end());     
sort(vec.rbegin(), vec.rend());
vector<string>::reverse_iterator rit;   // rit只能从右向左遍历容器
rit.base();        //  获得与反向迭代器对应的正向迭代器,可以从左向右遍历
 
string line = "first, middle, last"; 
auto rcomma = find(line.crbegin(), line.crend(), ','); 找到最后一个单词
cout << string(line.crbegin(), rcomma) << endl;    // tsal
cout << string(rcomma.base(), line.cend()) << endl;   // last 
 
3.使用其他容器初始化。容器类型和元素类型都要一致。
使用迭代器时,容器类型要一致,元素类型要可以转换。
list<string> la = {"Mike", "Alice", "May"};
list<string> lst(la);
vector<string> vs(la.begin(), la.end());
 
4.顺序容器使用assign完成赋值操作。
list<string> names;
vector<const char*> old;
names = old;  // error: 容器类型不一致
names.assign(old.cbegin(), old.end());   // const char* 可以转换到string
 
names.assign(10, "Hi");    // 容器中为10个“Hi”元素
 
 
5.数组容器必须提供容器大小。容器大小是array类型的一部分。
虽然内置数组不能复制,但是array容器可以复制和赋值。
int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
array<int, 42> a = arr;  // error,数组大小不一致
array<string, 10> b = arr; // ok
 
6.C++11中的emplace_front, emplace, emplace_back。
emplace操作将接收的参数传递给元素类型的构造函数来构造容器元素。
vector<vector<string>> v;
v.emplace_back(10, "Hi");
v.push_back(vector<string>(10, "Hi"));
 
7.容器适配器,在底层顺序容器上定义了新的接口,实现其他特定操作的新类型。
 
8.stack
stack<Type> st;
st.push(x);
st.emplace(args);
st.pop();
st.top();
 
9.queue
queue<Type> que;
que.push(x);
que.emplace(args);
que.pop();
que.front();
que.back();
 
10.priority_queue
priority_queue<Type, Container_Type, Compare> pq;
pq.push(x);
pq.emplece(args);
pq.pop();
pq.top();
 
posted @ 2021-05-29 14:59  萌新的学习之路  阅读(58)  评论(0编辑  收藏  举报