gpt4 book ai didi

c++ - 来自自定义类的对象 vector

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:31 26 4
gpt4 key购买 nike

在 C++ 中,我声明了一个自定义类来存储对象的一些值。然后,我声明所述对象的 vector 。最后,我遍历 vector 以将值分配给字段。

#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 rangemetric 是一个 int,computation1() 也是。在第一次迭代时,i=0 所以应该没问题。奇怪的是,在代码的其他地方,我有另一个类的 vector (包含在库中)并且此语法适用于它,所以我不明白为什么它在这里不起作用。

编辑:

好的,我将评论更改为以下行:vector MyWonderfulVector(10);

所以我的问题是我没有初始化 vector 的大小(来自 Matlab 的坏习惯;))据我所知,如果我没有将 vector 初始化为固定大小,我必须将对象 push_back 到“增加” vector 的大小。所以,我应该创建一个临时自定义对象来分配字段,然后将这个临时对象 push_back 到 vector 中。如果其中一位评论者想将其放入答案中......

最佳答案

您在行中声明了一个 vectorCustom

   vector<Custom> MyWonderfulVector;

但它是一个空的vector。里面没有元素。当您尝试在 for 循环中访问 vector 的元素时,您正在使用越界索引访问 vector

我可以想到以下选项来解决该问题。

  1. 创建具有初始大小的vector

     vector<Custom> MyWonderfulVector(10);
  2. 添加到 for 循环中的 vector

    for(int i=0 ; i<10 ; i++){
    Custom c;
    c.metric = computation1();
    c.nX= computation2();
    c.nY= computation3();
    MyWonderfulVector.push_back(c);

关于c++ - 来自自定义类的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26761478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com