c++ - 为什么这些 vector 不相等?

标签 c++ vector

我创建了两个 vector 并用 push_back 填充另一个,另一个用索引填充。我希望这些是平等的,但事实并非如此。谁能解释一下这是为什么?

#include <vector>
#include <iostream>

using namespace std;

int main() {

    vector<int> v0;
    v0.push_back(0);
    v0.push_back(1);
    v0.push_back(2);

    vector<int> v1;
    v1.reserve(3);
    v1[0] = 0;
    v1[1] = 1;
    v1[2] = 2;

    if (v0 != v1) {
            cout << "why aren't they equal?" << endl;
    }

    return 0;
}

最佳答案

vector<int> v1;
v1.reserve(3);
v1[0] = 0;
v1[1] = 1;
v1[2] = 2;

这可能是一个未定义的行为(虽然不确定它是否依赖于实现)。

您不能使用 operator[] 来填充 vector ,因为它返回对基础对象的引用,在您的情况下,它只不过是一堆位。

你应该使用 push_back() 或者只是 resize 你的 vector 。使用后者:-

vector<int> v1;
v1.resize(3);
v1[0] = 0;
v1[1] = 1;
v1[2] = 2;

关于c++ - 为什么这些 vector 不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27472327/

相关文章:

C++ 内联汇编函数无法正常工作

c++ - 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告吗?

c++ - 两个数字的按位连接

Python:拟合两个相关函数

c++ - 如何在C++中将整数的数字放入 vector 中

c++ - 我怎样才能指向 vector 元素?

c++ - 如何在 Windows 中读取 CD 音频数据?

c++ - Lock/CriticalSection 与 c++ 中的 volatile 的可见性

c++ - 在 vector 中的派生类上调用重载的 << 运算符

c++ - 如何在不循环的情况下将数组的内容复制到 C++ 中的 std::vector?