我创建了两个 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/