【问题标题】:Accessing pointers of vector elements访问向量元素的指针
【发布时间】:2026-01-25 18:25:01
【问题描述】:

我有这个结构:

struct povezava{
    int p;
    int q;
    int cena;
    int index;
};

这个向量包含指向结构的指针

vector<povezava*> povezave;

我必须从文本文件中读取信息,然后将值指定给向量的元素

while(graf >> p1 >> q1 >> cena1){

        povezave[counter]->p=p1;
        povezave[counter]->q=q1;
        counter++;

    }

但是当我尝试访问这些元素时出现错误,我猜是因为它们还没有定义?该任务说我必须使用静态数据结构,但这是不可能的,因为数组的大小取决于图中的数字。使用动态分配是我唯一的选择吗?(我真的不想)。

【问题讨论】:

  • 为什么不只是std::vector&lt;povezava&gt;
  • 因为我不能访问元素的 p 和 q
  • @Sobočan:当然可以。

标签: c++ pointers vector


【解决方案1】:

但是当我尝试访问这些元素时出现错误,我猜是因为它们还没有定义?

没错。您需要创建元素。幸运的是,这真的很容易,并且应该在您的 C++ 书中尽早演示。

while(graf >> p1 >> q1 >> cena1){
    povezava newElement;
    newElement.p = p1;
    newElement.q = q1;

    povezave.push_back(newElement);
}

在此示例中,我还假设向量已更改为 std::vector&lt;povezava&gt;,因为您没有给出不这样做的理由。

你应该更进一步,改变它真正令人困惑的名字。

我唯一的选择是使用动态分配吗?(我真的不想)。

嗯,你已经是(或者,至少,你会是)。向量动态分配其元素。

任务说我必须使用静态数据结构,但这是不可能的,因为数组的大小取决于图中的数字。

根据这个模糊要求的含义,您可能无法使用矢量。

【讨论】:

  • 它只是说我们“我们将使用静态数据结构来保存...”,是的,但我还有什么其他选择? @BoundaryImposition
【解决方案2】:

如果不为vector 的元素分配内存,则不能使用它们(设置元素的成员,...)。

但最好的解决方案是在 vector 中静态分配变量:

vector<povezava> povezave;

当然,这意味着您必须将-&gt; 更改为.,因为该成员不再是指针。

【讨论】: