在 Linux 下用 C++ 使用 STL(Standard Template Library)容器,和你用哪个操作系统关系不大,主要是 C++ 标准库 的使用。下面给你一个实用、偏工程的介绍。
一般 Linux 自带 g++:
g++ --version
编译 C++ 程序:
g++ main.cpp -std=c++17 -o app
./app
| 容器 | 特点 |
|---|---|
vector |
动态数组,最常用 |
deque |
双端队列 |
list |
双向链表 |
array |
固定大小数组(C++11) |
| 容器 | 特点 |
|---|---|
set |
不重复,有序 |
map |
key-value,有序 |
multiset |
可重复 |
multimap |
key 可重复 |
| 容器 | 特点 |
|---|---|
unordered_set |
哈希集合 |
unordered_map |
哈希表 |
| 容器 | 特点 |
|---|---|
stack |
栈 |
queue |
队列 |
priority_queue |
优先队列 |
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(10);
v.push_back(20);
for (int x : v) {
cout << x << " ";
}
cout << endl;
cout << v[0] << endl;
cout << v.size() << endl;
}
#include <map>
#include <string>
map<string, int> m;
m["a"] = 1;
m["b"] = 2;
for (auto& [k, v] : m) {
cout << k << ": " << v << endl;
}
#include <unordered_map>
unordered_map<string, int> um;
um["x"] = 100;
#include <set>
set<int> s = {3, 1, 2};
s.insert(4);
for (int x : s) {
cout << x << " ";
}
vector<int> v = {1, 2, 3};
// C++11 以后
for (auto x : v) {}
// 需要修改
for (auto& x : v) {}
// 索引
for (size_t i = 0; i < v.size(); ++i) {}
vector<int> v = {1,2,3};
for (auto it = v.begin(); it != v.end(); ) {
if (*it == 2)
it = v.erase(it);
else
++it;
}
size_t 而不是 intfor (size_t i = 0; i < v.size(); ++i)
void f(const vector<int>& v);
vectormap / unordered_mapsetlist / dequealgorithm(sort, find)如果你愿意,可以告诉我:
我可以直接给你对应场景的 STL 用法。