【问题标题】:creating a vector of pointers that point to more vectors创建指向更多向量的指针向量
【发布时间】:2009-07-16 08:11:43
【问题描述】:

我正在尝试创建一个包含指针的向量,每个指针都指向另一个 Cell 类型的向量,我使用结构创建了该向量。 下面的 for 循环允许我让用户定义指针向量中有多少元素。这是我的代码:

vector< vector<Cell>* >  vEstore(selection);
for (int t=0; t<selection; t++)
{
    vEstore[t] = new vector<Cell>; 
    vEstore[t]->reserve(1000);
}

我认为,这给了我一个指向Cell 类型的目标向量的指针向量。 这可以编译,但我现在正尝试将push_back 放到目标向量上,但不知道该怎么做。

由于目标向量是 Cell 类型,它由以下类型组成:

struct Cell
{
    unsigned long long lr1;
    unsigned int cw2;
};

我不知道如何用 2 个值将 push_back 放到这个目标向量上?

我在想……

binpocket[1]->lr1.push_back(10);
binpocket[1]->cw2.push_back(12);

我认为这会取消引用binpocket[1] 处的指针,从而显示目标数组值,然后依次寻址每个元素。 但它没有编译。

谁能帮忙 ...但这只有一个值,无论如何都不会编译。

【问题讨论】:

    标签: c++ vector pointers


    【解决方案1】:
    Cell cell = { 10, 12 };
    binpocket[1]->push_back(cell);
    

    或者,你可以给你的结构一个构造函数。

    struct Cell
    {
        Cell() {}
        Cell(unsigned long long lr1, unsigned int cw2)
            : lr1(lr1), cw2(cw2)
        {
        }
    
        unsigned long long lr1;
        unsigned int cw2;
    };
    

    那你就可以了

    binpocket[1]->push_back(Cell(10, 12));
    

    请注意,long long 是非标准的(目前),但它是一个普遍接受的扩展。

    【讨论】:

    • 这可能是一个非常愚蠢的问题,但为什么你有两次构造函数,一次是空的?
    • 如果您不提供构造函数,编译器将为您创建一个空的默认(即无参数)构造函数。这意味着你可以做Cell cell;。通过提供自定义构造函数,编译器不会为您创建默认构造函数。这就是我提供它的原因。如果您不想这样做,则不必这样做Cell cell;
    【解决方案2】:

    给你的单元格一个构造函数:

    struct Cell
    {
        unsigned long long lr1;
        unsigned int cw2;
    
        Cell( long long lv, int iv ) : lr1(lv), cw2(iv ) {}
    };
    

    你现在可以这样说:

    binpocket[1]->push_back( Cell( 10, 12 ) );
    

    顺便说一句,注意 long long 不是标准 C++。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多