vector: 动态数组,支持快速随机访问。内存连续,可以通过索引访问元素,元素可以动态扩展。
//容器使用示例
#include<iostream>
#include<vector>
int main() {
std::vector<int>a = { 1,2,3};
a.push_back(4);//添加元素
vec.insert(vec.begin(), 0);//插入元素,头插入0
for (int i : a) {
std::cout << i << " ";
}
}
//0 1 2 3 4
#include<iostream>
#include<vector>
int main() {
std::vector<int>a = { 0,2,3};
//迭代器遍历
for (auto i = a.begin(); i < a.end(); i++) {
std::cout << *i << " ";//0 2 3
}
//反向遍历
for (auto i = a.rbegin(); i != a.rend(); ++i) {
std::cout << *i << " ";//3 2 0
}
}
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = { 5, 2, 9, 1, 5, 6 };
// sort: 对元素进行排序
std::sort(vec.begin(), vec.end());
for (int i : vec) {
std::cout << i << " "; // 输出: 1 2 5 5 6 9
}
std::cout << std::endl;
// find: 查找元素
auto it = std::find(vec.begin(), vec.end(), 5);
if (it != vec.end()) {
std::cout << "五的位置是: " << std::distance(vec.begin(), it) << std::endl;//五的位置是: 2
}
// reverse: 反转元素顺序
std::reverse(vec.begin(), vec.end());
for (int i : vec) {
std::cout << i << " "; // 输出: 9 6 5 5 2 1
}
std::cout << std::endl;
return 0;
}
'
deque(双端队列容器)
deque(双端队列容器):和 vector 非常相似,区别在于使用该容器不仅尾部插入和删除元素高效,在头部插入或删除元素也同样高效,时间复杂度都是 O(1) 常数阶,但是在容器中某一位置处插入或删除元素,时间复杂度为 O(n) 线性阶;当需要向序列两端频繁的添加或删除元素时,应首选 deque 容器
#include <iostream>
#include <deque>
int main() {
std::deque<int> dq = {10, 20, 30};
// 在前后添加元素
dq.push_front(5);
dq.push_back(40);
// 遍历 deque
for (int i : dq) {
std::cout << i << " "; // 输出: 5 10 20 30 40
}
std::cout << std::endl;
// 删除两端元素
dq.pop_front();
dq.pop_back();
// 遍历 deque
for (int i : dq) {
std::cout << i << " "; // 输出: 10 20 30
}
std::cout << std::endl;
return 0;
}
map
是一种关联式容器,它存储键值对,并自动对键进行排序。它适用于需要快速查找和排序的场景。
#include<iostream>
#include<map>
int main() {
std::map<std::string, int> Map;
Map["a"] = 1;
Map["b"] = 2;
//遍历 map
for (auto i : Map) {
std::cout << i.first << ":" << i.second << std::endl;
/*a:1
b : 2*/
}
if (Map.find("a") != Map.end()) {
std::cout << "a的位置:" << Map["a"]; //a的位置:1
}
}
set
是存储唯一元素的有序集合,适用于去重和快速查找。
#include <iostream>
#include <set>
int main() {
std::set<int> numSet = { 1, 2, 3, 4, 5 };
// 插入元素
numSet.insert(3); // 插入重复元素,set 自动去重
numSet.insert(6);
// 遍历 set
for (int num : numSet) {
std::cout << num << " "; // 输出: 1 2 3 4 5 6
}
std::cout << std::endl;
return 0;
}
stack
和 queue
是容器适配器,基于其他容器(如 deque
)提供堆栈和队列的功能。
#include <iostream>
#include <stack>
int main() {
std::stack<int> s;
// 入栈
s.push(10);
s.push(20);
s.push(30);
// 输出栈顶元素并出栈
while (!s.empty()) {
std::cout << s.top() << " "; // 输出: 30 20 10
s.pop();
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <queue>
int main() {
std::queue<int> q;
// 入队
q.push(10);
q.push(20);
q.push(30);
// 输出队头元素并出队
while (!q.empty()) {
std::cout << q.front() << " "; // 输出: 10 20 30
q.pop();
}
return 0;
}