在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;
}
Run Code Online (Sandbox Code Playgroud)
它vector subscript out of range试图评估时会抛出一个MyWonderfulVector[i].metric = computation1();.metric也是一个int computation1().在第一次迭代中,i = 0所以它应该没问题.奇怪的是,在代码的其他地方,我有另一个类的向量(包含在库中),这个语法适用于它,所以我不明白为什么它在这里不起作用.
编辑:
好的评论我改为以下行:vector MyWonderfulVector(10);
所以我的问题是我没有初始化向量的大小(来自Matlab的坏习惯;))据我所知,如果我没有将向量初始化为固定大小,我必须推送对象以"增加"矢量的大小.所以,我应该创建一个临时的自定义对象来分配字段,然后将这个临时对象push_back到向量中.如果其中一位评论者希望将其纳入答案......
您定义了一个没有元素的向量
vector<Custom> MyWonderfulVector;
Run Code Online (Sandbox Code Playgroud)
如果你调用它的成员函数empty一样
std::cout << std::boolalpha << MyWonderfulVector.empty() << std::endl;
Run Code Online (Sandbox Code Playgroud)
那你会得到的 true
所以你可能不会使用应用于ampty向量的下标运算符,除了索引0,但在任何情况下你都不能赋值.
您可以最初使用some_variable 类似元素定义向量
vector<Custom> MyWonderfulVector( some_variable );
Run Code Online (Sandbox Code Playgroud)
然后你可以使用你的循环.或者您可以为some_variable 向量中的元素保留空间,在这种情况下使用成员函数push_back而不是下标运算符.例如
vector<Custom> MyWonderfulVector;
MyWonderfulVector.reserve( some_variable );
for ( int i=0 ; i<some_variable ; i++ )
{
Custom obj;
obj.metric = computation1();
obj.nX= computation2();
obj.nY= computation3();
MyWonderfulVector.push_back( obj );
}
Run Code Online (Sandbox Code Playgroud)
你声明vector的Custom在线S
vector<Custom> MyWonderfulVector;
Run Code Online (Sandbox Code Playgroud)
但它是空的vector.里面没有物品.当您尝试访问的元素vector在for循环中,您正在访问的vector用出界指数.
我可以想到以下选项来解决这个问题.
vector使用初始大小创建.
vector<Custom> MyWonderfulVector(10);
Run Code Online (Sandbox Code Playgroud)加入到vector中for环.
for(int i=0 ; i<10 ; i++){
Custom c;
c.metric = computation1();
c.nX= computation2();
c.nY= computation3();
MyWonderfulVector.push_back(c);
Run Code Online (Sandbox Code Playgroud)
}
| 归档时间: |
|
| 查看次数: |
16021 次 |
| 最近记录: |