C++容器常用操作
C++容器
本文主要介绍C++容器的常用操作及使用方法
vector
非常常用的容器
1. 基本操作
-
创建和初始化
std::vector<int> v; // 默认空的 vector
std::vector<int> v(10); // 创建一个大小为 10 的 vector,元素初始化为 0
std::vector<int> v(10, 5); // 创建一个大小为 10 的 vector,所有元素初始化为 5
std::vector<int> v = {1, 2, 3, 4}; // 使用列表初始化 -
获取大小
size_t size = v.size(); // 获取 vector 的元素个数
-
判断是否为空
bool is_empty = v.empty(); // 如果 vector 为空,返回 true
-
访问元素
int first = v[0]; // 通过索引访问元素
int second = v.at(1); // 使用 at() 安全访问(超出范围会抛出异常)
int last = v.back(); // 获取最后一个元素
int first_element = v.front(); // 获取第一个元素 -
添加元素
v.push_back(10); // 向 vector 末尾添加元素
v.push_back(20); -
删除元素
v.pop_back(); // 删除 vector 最后一个元素
2. 插入和删除元素(中间位置)
-
在指定位置插入元素
v.insert(v.begin() + 1, 50); // 在第 1 个位置插入元素 50
v.insert(v.end(), 100); // 在末尾插入元素 100 -
插入多个元素
v.insert(v.begin() + 2, 3, 10); // 在第 2 个位置插入 3 个元素,每个元素是 10
-
删除指定位置的元素
v.erase(v.begin() + 2); // 删除第 2 个位置的元素
-
删除一段元素
v.erase(v.begin() + 1, v.begin() + 3); // 删除从位置 1 到 2(不包括 3)之间的元素
-
删除所有元素
v.clear(); // 清空 vector 所有元素
3. 其他常用操作
-
交换内容
std::vector<int> v2 = {10, 20, 30};
v.swap(v2); // 交换 v 和 v2 中的元素 -
重新调整大小
v.resize(15); // 调整大小为 15,新增的元素默认初始化为 0
v.resize(10, 100); // 调整大小为 10,新增的元素初始化为 100 -
保留空间
v.reserve(20); // 为 v 保留足够的空间,以避免多次内存重分配
-
返回存储容量
size_t capacity = v.capacity(); // 获取当前已分配的内存空间容量
4. 迭代器操作
-
遍历
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << " ";
}
// 或者使用范围 for 循环
for (auto& elem : v) {
std::cout << elem << " ";
} -
逆序遍历
for (auto it = v.rbegin(); it != v.rend(); ++it) {
std::cout << *it << " ";
}
5. 排序
-
使用标准库排序
std::sort(v.begin(), v.end()); // 升序排序
std::sort(v.begin(), v.end(), std::greater<int>()); // 降序排序 -
自定义排序
std::sort(v.begin(), v.end(), [](int a, int b) {
return a > b; // 自定义降序
});
6. 其它有用操作
-
查找元素
auto it = std::find(v.begin(), v.end(), 10); // 查找元素 10 是否在 vector 中
if (it != v.end()) {
std::cout << "Found 10 at index: " << std::distance(v.begin(), it) << std::endl;
} -
合并两个 vector
std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2 = {4, 5, 6};
v1.insert(v1.end(), v2.begin(), v2.end()); // 将 v2 的元素添加到 v1 的末尾
for_each
std::for_each
是一个 遍历 容器元素的算法,它对容器中的每一个元素应用给定的操作(通常是一个函数或 lambda 表达式)。它不会返回任何值,主要用来执行副作用操作。
其实也不是绝对的每一个元素,具体是从哪个元素开始到哪个元素结束取决于传进去的迭代器(不过一般都是传begin()
和end()
)
示例:
string s = "abcdefg"; |
all_of
std::all_of
是一个 条件检查 算法,用于检查容器中的所有元素是否满足某个条件。如果所有元素都满足条件,它返回 true
,否则返回 false
。
同理也不一定是所有元素,取决于传进去的迭代器
示例:
vector<int> arr = {2, 4, 6, 8, 7, 11, 31, 21}; |
any_of
std::any_of
: 检查容器中是否 至少有一个 元素满足某个条件
示例:
vector<int> arr = {1, 2, 3, 4, -5, 6, 7, 8}; |
none_of
std::none_of
: 检查容器中是否 没有一个 元素满足某个条件
示例:
vector<int> arr = {1, 2, 3, 4, -5, 6, 7, 8}; |
find_if
std::find_if
: 查找容器中 第一个满足条件 的元素
*注:*找到的一定是第一个满足条件的
示例:
vector<int> arr = {1, 2, 3, 4, -5, 6, 7, -8}; |
count_if
std::count_if
: 统计容器中 满足条件的元素数量
示例:
vector<int> arr = {1, 2, 3, 4, -5, 6, 7, -8}; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 (๑>ᴗ<๑)!
评论