为了更好地使用 C++ 刷算法题,学习一下 STL
✨前言
数据结构与算法是找工作绕不过的坎,因此慢慢啃这一块是非常有必要的,并且学习它也有利于自己一直保持思考的习惯。希望自己变得更优秀,希望大家也能好好学习。
string
字符串
string 初始化
| string s1; string s2(s1); string s3("value"); string s4 = s3; string s5 = "abc"; string s6 = (2, 'a');
|
string 操作
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 46 47 48 49 50 51 52 53 54
| s1 = "hello"; s1.assign("abcdef", 4); s2.assigh(s1, 0, 3); s2.length();
s1[0]; s1.at(0);
string s1 = "我"; string s2 = "你"; s1 += s2; s1.append("ta"); string s3 = s1 + "爱" + "你"; string s4 = "我" + "爱" + s2;
string s1 = "abcdef"; s1.find("ab"); s1.find("ac"); s1.rfind("ab");
string s3 = "hello"; s3.replace(1, 3, "1111");
string s1 = "abc"; string s2 = "abc"; string s3 = "bbc"; s1.compare(s2); s1.compare(s3); s3.compare(s1);
string s1 = "abcdef"; s1.substr(1, 3);
string s1 = "hello"; s1.insert(1, "111");
s1.erase(1, 3);
string s1 = "abc"; const char * p = s1.c_str();
string s2(p);
|
vector
动态数组
vector 初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| vector<int> v1;
vector<int> v2(v1);
int arr[5] = {1, 2, 3, 4, 5}; vector<int> v3(arr, arr + 5);
vector<int> v4(5);
vector<int> v5(5, 1);
vector<int> v6{1,2,3,4,5};
vector<int> v7{2}; vector<string> v8{2}; vector<string> v9{2, "hi"};
|
vector 操作
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
| vector<int> v1(4, 3); vector<int> v2 = v1; printVector(v2);
vector<int> v4; v4.assign(v2.begin(), v2.end()); printVector(v2);
vector<int> v5 = {1, 2, 3, 4, 5}; v4.swap(v5); printVector(v4);
cout << v4.size() << endl; if(v4.empty()){ cout << "v4 为空" << endl; } else{ cout<< "v4 不为空" << endl; } cout << v4.capacity() << endl; v4.resize(7); printVector(v4); v4.resize(10, 3); printVector(v4); v4.resize(3); printVector(v4);
vector<int> v; v.push_back(1); v.push_back(2); v.push_back(3); v.push_back(4);
cout << v[0] << endl; cout << v.at(1) << endl; cout << v.front() << endl; cout << v.back() << endl;
v.insert(v.begin(), 100); printVector(v); v.insert(v.begin(), 2, 100); printVector(v);
v.push_back(10); printVector(v);
v.pop_back(); printVector(v);
v.erase(v.begin()); printVector(v);
v.clear();
|
vector 遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
for(int i = 0; i < v.size(); ++i) { cout << v[i] << " "; } cout << endl;
for (int i: v) { cout << i << " "; } cout << endl;
for (vector<int>::iterator i = v.begin(); i != v.end(); i++) { cout << *i << " "; } cout << endl;
|
deque
双端队列
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| deque<int> d;
deque<int> d2(d);
deque<int> d4(5, 1);
deque<int> d3(d2.begin(), d2.end());
deque<int> d; d.assign(3, 1); printDeque(d);
deque<int> d2; d2.assign(d.begin(), d.end()); printDeque(d2);
deque<int> d3; d3.push_back(1); d3.push_back(2); d3.push_front(3); printDeque(d3); d3.swap(d2); printDeque(d3); printDeque(d2);
deque<int> d; d.push_back(1); d.push_back(2); d.push_back(3); d.push_back(4);
cout << d.size() << endl; cout << d.empty() << endl;
d.resize(10, 2); printDeque(d);
cout << d[0] << endl; cout << d.at(0) << endl;
cout << d.front() << endl; cout << d.back() << endl;
deque<int> d; d.push_back(1); d.push_back(2); d.push_front(3); printDeque(d);
d.insert(d.begin(), 1); printDeque(d); d.insert(d.begin(), 3, 2); printDeque(d);
d.pop_back();
d.pop_front();
d.erase(d.begin(), d.end()); d.clear();
|
stack
先进后出
| stack<int> s; s.push(10); s.push(20); s.push(30);
cout << s.size() << endl;
cout << s.top() << endl; s.pop(); cout << s.top() << endl; s.pop(); cout << s.top() << endl; s.pop();
cout << s.empty() << endl; cout << s.size() << endl;
|
queue
先进先出
| queue<int> q; q.push(1); q.push(2); q.push(3); q.push(4);
cout << q.size() << endl;
while(!q.empty()){ cout << q.front() << " "; q.pop(); } cout << endl;
|
list
双向链表
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
| list<int> l; list<int> l1(3, 10); list<int> l2(l1.begin(), l1.end()); printList(l2);
list<int> l3; l3.push_back(1); l3.push_back(2); l3.push_front(3); l3.push_front(4); printList(l3);
l3.insert(l3.begin(), 2, 100); printList(l3);
l3.pop_back(); l3.pop_front(); printList(l3);
l3.remove(4); printList(l3); l3.erase(l3.begin(), l3.end()); l3.clear();
list<int> l; l.assign(3, 10); printList(l); l.push_back(99); l.push_front(100);
cout << l.size() << endl; cout << l.empty() << endl; cout << l.front() << endl; cout << l.back() << endl;
|
set
不允许重复的值,元素不允许修改
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| set<int> s1; s1.insert(8); s1.insert(3); s1.insert(2); s1.insert(7);
printSet(s1); cout << s1.size() << endl; cout << s1.empty() << endl;
s1.erase(2); printSet(s1);
s1.erase(s1.begin(), s1.end()); s1.clear();
set<int> s1; s1.insert(1); s1.insert(5); s1.insert(7); s1.insert(2); s1.insert(3); s1.insert(5);
printSet(s1); set<int>::iterator pos = s1.find(1); if(pos != s1.end()){ cout << "找到了 1 :" << *pos << endl; } else{ cout << "未找到" << endl; }
cout << s1.count(5) << endl;
set<int>::iterator low = s1.lower_bound(3); if(low != s1.end()){ cout << "找到了 lower_bound(3):" << *low << endl; } else{ cout << "未找到" << endl; } set<int>::iterator up = s1.upper_bound(3); if(up != s1.end()){ cout << "找到了 upper_bound(3):" << *up << endl; } else{ cout << "未找到" << endl; }
pair<set<int>::iterator, set<int>::iterator> ret = s1.equal_range(3);
cout << *(ret.first) << endl; cout << *(ret.second) << endl;
set<int, MyCompare> s; s.insert(10); s.insert(4); s.insert(6); s.insert(4); s.insert(7); s.insert(1);
for(int num : s){ cout << num << " "; } cout << endl;
|
map
键值对
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
| map<int, int> m;
m.insert(pair<int, int>(1, 10)); m.insert(make_pair(2, 20)); m.insert(map<int, int>::value_type(3, 30)); m[4] = 40;
for(map<int, int>::iterator it = m.begin(); it != m.end(); it++){ cout << "key:" << it->first << "value:" << it->second << endl; }
cout << m.size() << endl; cout << m.empty() << endl;
m.erase(m.begin()); m.erase(2);
m.erase(m.begin(), m.end()); m.clear();
map<int, int> m; m.insert(make_pair(1, 10)); m.insert(make_pair(2, 20)); m.insert(make_pair(3, 30));
map<int, int>::iterator pos = m.find(1); if(pos != m.end()){ cout << "找到" << endl; }else{ cout << "未找到" << endl; }
int num = m.count(3); cout << "键为3的数量为:" << num << endl;
map<int, int>::iterator ret1 = m.lower_bound(2); map<int, int>::iterator ret2 = m.upper_bound(2);
cout << ret1->first << ret1->second << endl; cout << ret2->first << ret2->second << endl;
|