【发布时间】:2025-11-27 08:25:02
【问题描述】:
在 C++ 中,我声明了一个自定义类来存储对象的一些值。然后,我声明所述对象的向量。最后,我遍历向量以将值分配给字段。
#include <vector>
using namespace std;
class Custom
{
public:
int metric,nX,nY;
private:
};
int main( int argc, char** argv )
{
vector<Custom> MyWonderfulVector;
// Some code//
for(int i=0 ; i<10 ; i++){
MyWonderfulVector[i].metric = computation1();
MyWonderfulVector[i].nX= computation2();
MyWonderfulVector[i].nY= computation3();
}
return 0;
}
当它试图评估MyWonderfulVector[i].metric = computation1(); 时,它会抛出一个vector subscript out of range。 metric 是一个整数,computation1() 也是。在第一次迭代中, i=0 所以应该没问题。奇怪的是,在代码的其他地方,我有另一个类的向量(包含在库中),这种语法适用于它,所以我不明白为什么它在这里不起作用。
编辑:
好的 cmets 我改为以下行:vector MyWonderfulVector(10);
所以我的问题是我没有初始化向量的大小(Matlab 的坏习惯;))据我了解,如果我不将向量初始化为固定大小,我必须将对象 push_back 为“增加”向量的大小。所以,我应该创建一个临时自定义对象来分配字段,然后将这个临时对象 push_back 到向量中。如果其中一位评论者想将其放入答案中...
【问题讨论】:
-
你的
MyWonderfulVector有对象吗?您需要通过push_back操作将对象分配给向量。您是否在未显示的代码中这样做了? -
我怀疑
some_variable > MyWonderfulVector.size()。您的问题可能在// Some code//的某个地方。 -
不,它是空的。我想做的是:“vector
MyIntVector” -
然后给它一个大小,比如
vector<Custom> MyWonderfulVector(some_variable);。即使是int情况,它也是未定义的行为。 -
@Doombot 你可以使用
resize来设置vector的大小。