std::vector c++
std::vector
是 C++标准库中的一个非常灵活的动态数组容器,它提供了多种赋值方式。我会用简单易懂的方式,结合一些示例,来介绍这些赋值方法。
1.使用std::vector
的构造函数赋值
方法 1:直接初始化
你可以直接在定义时初始化std::vector
,使用大括号{}
或者std::initializer_list
。
std::vector<int> vec1 = {1, 2, 3, 4, 5}; // 使用大括号初始化
std::vector<int> vec2{10, 20, 30}; // 使用大括号初始化(C++11 及以上)
方法 2:指定大小和初始值
你可以指定std::vector
的大小,并给所有元素赋相同的初始值。
std::vector<int> vec3(5, 0); // 创建一个大小为 5,所有元素初始化为 0 的 vector
std::vector<int> vec4(3, 10); // 创建一个大小为 3,所有元素初始化为 10 的 vector
方法 3:从另一个容器复制
你可以从另一个std::vector
或其他兼容的容器复制数据。
std::vector<int> vec5 = vec1; // 从 vec1 复制
std::vector<int> vec6(vec2.begin(), vec2.end()); // 从 vec2 的迭代器范围复制
2.使用assign
方法赋值
assign
方法可以用来替换std::vector
中的所有元素。
std::vector<int> vec7;
vec7.assign(3, 100); // 用 3 个 100 替换 vec7 的内容
vec7.assign(vec1.begin(), vec1.end()); // 用 vec1 的内容替换 vec7 的内容
3.使用push_back
和emplace_back
动态添加元素
push_back
和emplace_back
是动态添加元素的常用方法。
push_back
push_back
会先构造一个临时对象,然后将其复制到std::vector
中。
std::vector<int> vec8;
vec8.push_back(1); // 添加元素 1
vec8.push_back(2); // 添加元素 2
emplace_back
emplace_back
更高效,因为它直接在std::vector
中构造对象,避免了临时对象的创建和复制。
std::vector<int> vec9;
vec9.emplace_back(3); // 直接构造元素 3
vec9.emplace_back(4); // 直接构造元素 4
4.使用insert
方法插入元素
insert
方法可以在指定位置插入一个元素或一个范围的元素。
插入单个元素
std::vector<int> vec10 = {1, 2, 3};
vec10.insert(vec10.begin() + 1, 10); // 在索引 1 的位置插入元素 10
// 结果:vec10 = {1, 10, 2, 3}
插入多个元素
std::vector<int> vec11 = {1, 2, 3};
vec11.insert(vec11.end(), {4, 5, 6}); // 在末尾插入多个元素
// 结果:vec11 = {1, 2, 3, 4, 5, 6}
5.使用resize
方法调整大小
resize
方法可以调整std::vector
的大小,并用指定的值填充新元素(如果需要)。
std::vector<int> vec12 = {1, 2, 3};
vec12.resize(5, 100); // 调整大小为 5,新元素用 100 填充
// 结果:vec12 = {1, 2, 3, 100, 100}
6.使用swap
方法交换内容
swap
方法可以交换两个std::vector
的内容。
std::vector<int> vec13 = {1, 2, 3};
std::vector<int> vec14 = {4, 5, 6};
vec13.swap(vec14); // 交换 vec13 和 vec14 的内容
// 结果:vec13 = {4, 5, 6}, vec14 = {1, 2, 3}
7.使用clear
方法清空内容
clear
方法可以清空std::vector
的所有元素,但不会释放内存。
std::vector<int> vec15 = {1, 2, 3};
vec15.clear(); // 清空 vec15 的内容
// 结果:vec15 = {}
总结
std::vector
提供了多种赋值和操作方式,可以根据具体需求选择合适的方法:
• 构造函数:直接初始化或从其他容器复制。
• assign
:替换整个内容。
• push_back
和emplace_back
:动态添加元素。
• insert
:在指定位置插入元素。
• resize
:调整大小并填充新元素。
• swap
:交换两个std::vector
的内容。
• clear
:清空内容。
• empty
:检查std::vector
是否为空,即是否没有任何元素。如果向量为空,它返回true
;否则返回false
。
std::vector
提供了empty()
函数。这个函数用来检查std::vector
是否为空,即是否没有任何元素。如果向量为空,它返回true
;否则返回false
。
empty()
函数的用法
语法
bool empty() const;
• 返回值:如果std::vector
为空(即没有元素),返回true
;否则返回false
。
示例代码
以下是一个简单的示例,展示如何使用empty()
函数:
#include <iostream>
#include <vector>int main() {std::vector<int> vec;// 检查向量是否为空if (vec.empty()) {std::cout << "The vector is empty." << std::endl;} else {std::cout << "The vector is not empty." << std::endl;}// 向向量中添加元素vec.push_back(1);vec.push_back(2);// 再次检查向量是否为空if (vec.empty()) {std::cout << "The vector is empty." << std::endl;} else {std::cout << "The vector is not empty." << std::endl;}return 0;
}
输出结果
The vector is empty.
The vector is not empty.
empty()
函数的效率
empty()
函数的效率非常高,因为它只是简单地检查向量的大小是否为零。它的时间复杂度是O(1),这意味着它几乎瞬间就能完成检查。
与size()
的比较
虽然你可以通过检查size()
是否为零来判断向量是否为空,但使用empty()
更加直观和高效。例如:
if (vec.size() == 0) {std::cout << "The vector is empty." << std::endl;
} else {std::cout << "The vector is not empty." << std::endl;
}
虽然这种方式也能达到相同的效果,但empty()
更简洁,也更符合 C++的习惯。
总结
std::vector
的empty()
函数是一个非常有用的工具,用于快速检查向量是否为空。它简单、高效,是处理std::vector
时的推荐方法。
希望这个解释对你有帮助!如果有任何问题,欢迎随时问我哦。