STL容器
vector 可变数组
int main () {
cin >> n;
// 类型 变量名 构造函数参数
vector<int> ve (n, 0);
for (int i = 0; i < n; ++i) {
cin >> ve[i]; //vector用[]即可访问对应元素,与数组相同
}
ve.push_back(1); //.push_back(x)在vector尾部新增一个x
ve.pop_back(); //.pop_back()删除vector尾部的元素,长度--
cout << ve.size() << '\n'; //.size()返回vector的长度
ve.clear(); //.clear()清空vector,注意清空后长度为0
}
set 有序不重复集合
int main () {
// 类型 变量名
set<int> st;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> x;
st.insert(x); //把元素插入集合
}
cout << st.size() << '\n'; //.size()返回set中元素个数
for (int i : st) { //可以用for each循环枚举元素
cout << i << '\n';
}
cout << st.count(1) << '\n'; //.count(x)返回set中有多少个x
st.erase(1); //.earse(x)删除set中的x
}
map 按key排序的key不重复的key-value对集合
int main () {
// key类型 value类型 变量名
map<int, int> mp;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> x;
mp[x]++; //map同样支持[]访问对应元素
}
cout << mp.size() << '\n'; //.size()返回map中K-V对个数
cout << mp.count(1) << '\n'; //.count(x)返回map中key为x的K-V对个数(0或1)
mp.erase(1); //.erase(x)删除map中key为x的K-V对
for (int i = 0; i < n; ++i) {
cin >> x;
//这种方法虽然没错但效率较低
//map在访问不存在的key时
//会自动插入对应的key-value对,value为0
//map的操作时间与它的大小成正比
//所以要避免这样来查询map中是否存在某个key
if (mp[x]) cout << x << " in map\n";
else cout << x << " not in map\n";
//使用.count(x)就不会有上面的问题
if(mp.count(x))cout << x << " in map\n";
else cout << x << " not in map\n";
}
}