auto 你是我的神
1. vector
- 特点:动态数组,支持随机访问,插入和删除效率较低。
- 适用场景:需要频繁随机访问的场景。
- 典型操作:
push_back()
: 添加元素到末尾。
pop_back()
: 删除末尾元素。
size()
: 获取当前大小。
capacity()
: 获取当前容量。
resize()
: 调整大小。
erase()
: 删除指定位置的元素。
clear()
: 清空容器。
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
| #include <iostream> #include <vector> using namespace std;
int main() { vector<int> vec; vec.push_back(1); vec.push_back(2); vec.push_back(3);
cout << "Vector size: " << vec.size() << endl; cout << "Elements: "; for (auto x : vec) { cout << x << " "; } cout << endl;
vec.erase(vec.begin() + 1); cout << "After erase: "; for (auto x : vec) { cout << x << " "; } cout << endl;
vec.clear(); cout << "After clear: " << vec.size() << endl;
return 0; }
|
2. list
- 特点:双向链表,插入和删除效率高,不支持随机访问。
- 适用场景:需要频繁插入和删除的场景。
- 典型操作:
push_front()
: 添加元素到头部。
push_back()
: 添加元素到尾部。
pop_front()
: 删除头部元素。
pop_back()
: 删除尾部元素。
insert()
: 在指定位置插入元素。
erase()
: 删除指定位置的元素。
reverse()
: 反转链表。
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
| #include <iostream> #include <list> using namespace std;
int main() { list<int> lst; lst.push_back(1); lst.push_back(2); lst.push_front(0);
cout << "List elements: "; for (auto x : lst) { cout << x << " "; } cout << endl;
lst.erase(lst.begin()); cout << "After erase: "; for (auto x : lst) { cout << x << " "; } cout << endl;
lst.reverse(); cout << "After reverse: "; for (auto x : lst) { cout << x << " "; } cout << endl;
return 0; }
|
3. deque
- 特点:双端队列,支持从两端插入和删除,支持随机访问。
- 适用场景:需要从两端插入和删除的场景。
- 典型操作:
push_front()
: 添加元素到头部。
push_back()
: 添加元素到尾部。
pop_front()
: 删除头部元素。
pop_back()
: 删除尾部元素。
front()
: 获取头部元素。
back()
: 获取尾部元素。
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
| #include <iostream> #include <deque> using namespace std;
int main() { deque<int> dq; dq.push_back(1); dq.push_back(2); dq.push_front(0);
cout << "Deque elements: "; for (auto x : dq) { cout << x << " "; } cout << endl;
dq.pop_front(); cout << "After pop_front: "; for (auto x : dq) { cout << x << " "; } cout << endl;
dq.pop_back(); cout << "After pop_back: "; for (auto x : dq) { cout << x << " "; } cout << endl;
return 0; }
|
4. set
- 特点:有序集合,元素唯一,支持快速查找。
- 适用场景:需要存储唯一元素并快速查找的场景。
- 典型操作:
insert()
: 插入元素。
erase()
: 删除元素。
find()
: 查找元素。
count()
: 检查元素是否存在。
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
| #include <iostream> #include <set> using namespace std;
int main() { set<int> s; s.insert(3); s.insert(1); s.insert(2);
cout << "Set elements: "; for (auto x : s) { cout << x << " "; } cout << endl;
s.erase(2); cout << "After erase: "; for (auto x : s) { cout << x << " "; } cout << endl;
if (s.find(3) != s.end()) { cout << "Element 3 exists" << endl; }
return 0; }
|
5. map
- 特点:键值对集合,键唯一,支持快速查找。
- 适用场景:需要存储键值对并快速查找的场景。
- 典型操作:
insert()
: 插入键值对。
erase()
: 删除键值对。
find()
: 查找键对应的值。
count()
: 检查键是否存在。
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
| #include <iostream> #include <map> using namespace std;
int main() { map<string, int> m; m["Alice"] = 25; m["Bob"] = 30; m.insert(make_pair("Charlie", 35));
cout << "Map elements:" << endl; for (auto &pair : m) { cout << pair.first << ": " << pair.second << endl; }
m.erase("Bob"); cout << "After erase:" << endl; for (auto &pair : m) { cout << pair.first << ": " << pair.second << endl; }
if (m.find("Alice") != m.end()) { cout << "Alice's age: " << m["Alice"] << endl; }
return 0; }
|
6. stack
- 特点:后进先出(LIFO)的容器适配器。
- 适用场景:需要模拟栈操作的场景。
- 典型操作:
push()
: 添加元素到栈顶。
pop()
: 删除栈顶元素。
top()
: 获取栈顶元素。
empty()
: 检查栈是否为空。
size()
: 获取栈的大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> #include <stack> using namespace std;
int main() { stack<int> stk; stk.push(1); stk.push(2); stk.push(3);
cout << "Stack size: " << stk.size() << endl; cout << "Top element: " << stk.top() << endl;
stk.pop(); cout << "After pop: " << stk.top() << endl;
return 0; }
|
7. queue
- 特点:先进先出(FIFO)的容器适配器。
- 适用场景:需要模拟队列操作的场景。
- 典型操作:
push()
: 添加元素到队尾。
pop()
: 删除队首元素。
front()
: 获取队首元素。
back()
: 获取队尾元素。
empty()
: 检查队列是否为空。
size()
: 获取队列的大小。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| #include <iostream> #include <queue> using namespace std;
int main() { queue<int> q; q.push(1); q.push(2); q.push(3);
cout << "Queue size: " << q.size() << endl; cout << "Front element: " << q.front() << endl; cout << "Back element: " << q.back() << endl;
q.pop(); cout << "After pop: " << q.front() << endl;
return 0; }
|
总结
- vector: 动态数组,适合随机访问。
- list: 双向链表,适合频繁插入和删除。
- deque: 双端队列,支持两端操作。
- set: 有序集合,支持快速查找。
- map: 键值对集合,支持快速查找。
- stack: 后进先出,适合栈操作。
- queue: 先进先出,适合队列操作。
通过这些容器,可以根据具体需求选择合适的容器来优化代码性能和可读性。