在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
也是一个int和 computation1()
. 在第一次迭代中,i = 0所以它应该没问题 . 奇怪的是,在代码的其他地方,我有另一个类的向量(包含在库中),这个语法适用于它,所以我不在这里工作 .
EDIT :
好的评论我改为以下行:vector MyWonderfulVector(10);
所以我的问题是我没有初始化向量的大小(来自Matlab的坏习惯;))据我所知,如果我没有将向量初始化为固定大小,我必须推送对象以“增加”矢量的大小 . 所以,我应该创建一个临时的自定义对象来分配字段,然后将这个临时对象push_back到向量中 . 如果其中一位评论者希望将其纳入答案......
5 回答
您定义了一个没有元素的向量
如果你调用它的成员函数
empty
就好那么你会得到
true
所以你可能不会使用应用于ampty向量的下标运算符,除了索引0,但在任何情况下你都不能赋值 .
您最初可以使用
some_variable
元素定义向量然后你可以使用你的循环 . 或者您可以为向量中的
some_variable
元素保留空间,在这种情况下使用成员函数push_back
而不是下标运算符 . 例如你在行中声明
Custom
的Custom
但它是空的
vector
. 里面没有物品 . 当您尝试访问for
循环中vector
的元素时,您正在使用越界索引访问vector
.我可以想到以下选项来解决这个问题 .
vector
.for
循环中的vector
.}
我以前遇到过同样的问题 . 我尝试使用vector类中的push_back函数并且它工作正常 . 也许它会解决你的问题
向量不像数组 . 你需要使用push_back
在访问元素之前尝试使用resize() . 所以你的代码将成为:
如果您还想添加一些其他元素,可以将矢量的大小存储在size_t变量中,并在每次添加其他元素时将其递增 .
这是一种方法 .