coming
天行健 君子以自强不息
记录我的成长
vector容器
vector类是C++为内置数组引入的一种替代表示,建议使用。要使用vector类,需包含头文件vector
。通过动态数组实现。定义于<vector>
构造
1 2 3 4 5 6 7 8 9 10 11 12 13
| vector<int> ivec;
vector<int> ivec={3, 6,9, 2, 5, 7};
vector<int> ivec(7, 3);
vector<int> ivec(ivec_0);
vector<int> ivec(arr, arr+3);
|
插入
注:虽然使用insert泛型算法可以在容器的任意位置插入元素,但是不建议这么做,因为vector是通过动态数组实现,在其他位置插入元素会有很大的开销,如果需要在任意位置插入,建议选择其他的容器类型。
删除
迭代器
除了使用下标访问vector的元素,还可以使用迭代器进行访问。以vector为例,其他容器同理。
1 2
| vector<int>::iterator it; for(it=ivec.begin(); it != ivec.end(); ++it)
|
其中,支持迭代器的容器类型有:vector、list、string、deque、set、map;不支持的有:stack、queue、priority_queue。
对于支持迭代器的顺序容器,其具有访问第一个与最后一个元素的捷径:front方法与back方法;除此之外,queue也具有。
list容器
list容器是对C语言中链表的替代表示,内存区域非连续,通过双向链表实现。定义于<list>
构造
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| list<int> ilist;
list<int> ilist={3, 6,9, 2, 5, 7};
list<int> ilist(7, 3);
list<int> ilist(ilist_0);
list<int> ilist(arr, arr+3);
list<int> ilist(ivec.begin(), ivec.begin()+3);
|
插入
1 2 3 4 5 6 7 8
| ilist.push_front(num);
ilist.push_back(num);
ilist.insert(list_it, num);
|
删除
1 2 3 4 5 6 7 8 9 10
| ilist.pop_front();
ilist.pop_back();
ilist.erase(list_it);
ilist.erase(list_it_low, list_it_high);
|
string
C++标准库提供了字符串类抽象的一个公共实现——string。定义于<string>
构造
1 2 3 4 5 6 7 8 9 10 11 12 13
| string str;
string str(7, 'a');
string str(str_0); string str("hello");
string str(const char * str_c); string str="hello";
|
插入
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| str.push_back(ch);
str.insert(pos, string str_str); str.insert(pos, const char * str_str);
str.insert(pos, string str_str, subpos, sublen);
str.insert(pos, const char * str_str, n);
str.insert(pos, n, ch);
str.insert(it, ch);
str.insert(it, n, ch);
|
删除
1 2 3 4 5 6 7 8
| str.erase(pos, len);
str.erase(it);
str.erase(it_low, it_high);
|
拼接
1 2
| str.append("hello"); str.append(str_str);
|
比较
1 2 3 4 5 6 7 8 9 10 11 12
| str.compare(string str_str); str.compare(const char * str_str);
str.compare(pos, len, string str_str); str.compare(pos, len, const char * str_str);
str.compare(pos, len, string str_str, subpos, sublen);
str.compare(pos, len, const char * str_str, n);
|
子串
查找
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
str.find(const string str_str, pos); str.find(const char * str_str, pos);
str.find(ch, pos);
str.rfind(const string str_str, pos); str.rfind(const char * str_str, pos);
str.rfind(ch, pos);
str.find_first_of(const string str_str); str.find_first_of(const char * str_str);
str.find_last_of(const string str_str); str.find_last_of(const char * str_str);
str.find_first_not_of(const string str_str); str.find_first_not_of(const char * str_str);
str.find_last_not_of(const string str_str); str.find_last_not_of(const char * str_str);
|
获取输入
deque容器
deque容器为双向队列的抽象表示。通过双端数组实现,内存区域连续。定义于<deque>
构造
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| deque<int> ideque;
deque<int> ideque(7, 3);
deque<int> ideque={3, 6,9, 2, 5, 7};
deque<int> ideque(ideque_0);
deque<int> ideque(list_it_low, list_it_high);
|
插入
1 2 3 4 5
| ideque.push_front(num);
ideque.push_back(num);
|
删除
1 2 3 4 5
| ideque.pop_front();
ideque.pop_back();
|
本文代表个人观点,内容仅供参考。若有不恰当之处,望不吝赐教!