原来两个std::vector可以直接进行相等判断的吗?
2025年9月25日,周四晚上
学了几年C++,今天才知道这个
在 C++ 中,标准库已经为 std::vector
重载了 ==
运算符,因此可以直接使用 vec1 == vec2
来判断两个向量是否相等,这非常方便。
⚖️ 相等判断的具体规则
直接使用 ==
进行比较时,需要同时满足以下两个条件,结果才会是 true
:
大小相同:两个
vector
必须包含相同数量的元素。这是比较的第一步,如果大小不同,会立刻返回false
对应元素相等:两个
vector
中相同位置上的每一个元素都必须相等。这意味着元素的顺序至关重要
它的工作原理类似于先检查 size()
是否相等,然后再调用 std::equal
函数逐个比较对应位置的元素。
🔍 代码示例与注意事项
下面的代码展示了直接比较的用法
#include <iostream>
#include <vector>
#include <string>int main() {// 示例1:内容相同、顺序相同std::vector<std::string> vec1 = {"apple", "banana", "cherry"};std::vector<std::string> vec2 = {"apple", "banana", "cherry"};if (vec1 == vec2) {std::cout << "vec1 and vec2 are equal." << std::endl; // 会执行}// 示例2:内容相同、顺序不同std::vector<std::string> vec3 = {"apple", "banana", "cherry"};std::vector<std::string> vec4 = {"banana", "apple", "cherry"};if (vec3 == vec4) {std::cout << "vec3 and vec4 are equal." << std::endl;} else {std::cout << "vec3 and vec4 are NOT equal (different order)." << std::endl; // 会执行}return 0;
}
一个重要提示:当 vector
中存储的是指针(例如 std::vector<int*>
)时,==
比较的是指针的值(即内存地址),而不是指针所指对象的内容。如果两个指针指向不同的内存地址,即使这些地址上的值完全相同,也会被认为是不相等的。