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

标签 c++ class vector

在 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/

相关文章:

c++ - 禁用 Clang 工具诊断

c++ - 交换两个指针

c++ - 这个宏是否有问题 - 检查状态并在失败时返回

C# 泛型类<T>

java - getDeclaredFields 具有实际运行时类型,适用于 Unsafe.objectFieldOffset(f)

c++ - 基类的虚拟 friend 函数?

c++ - 自动选择按值传递还是按引用传递

c++ - 将函数指针作为 vector<pair<string,X>> X 参数传递

c++ - 需要帮助从 vector 生成随机字符串

c++ - std::vector reserve() 和 push_back() 比 resize() 和数组索引快,为什么?