【发布时间】:2021-12-10 02:20:29
【问题描述】:
我想用向量创建一个矩阵。在下面的代码中,我创建了一个向量,每个条目都包含一个指向另一个作为列的向量(myvector)的指针。我将随机值推送到 myvector(即列)。但是当我尝试访问数组的值时,它会在 cout 语句中弹出一个编译错误 "error: no match for 'operator*' (operand type is 'std::vector<int>')。我想知道如何访问这些值。我很确定这是一个幼稚的问题。
#include <iostream>
#include <vector>
using namespace std;
int main ()
{
std::vector<vector<int>*> main;
for(int j=0; j<3; j++){
vector<int> *myvector = new vector<int>;
main.push_back(myvector);
}
main[0]->push_back(1);
main[0]->push_back(4);
main[1]->push_back(6);
main[1]->push_back(7);
main[1]->push_back(8);
main[2]->push_back(3);
for(int j=0; j<3; j++){
for(uint32_t i=0; i<main[j]->size(); i++)
std::cout<<main[j][i]<<" ";
cout<<"\n";
}
return 0;
}
【问题讨论】:
-
没关系。读错了。
-
main[j]是一个指针,所以main[j][i]中的[i]迭代的是指针,而不是内部向量。我认为(*main[j])[i]是您所追求的,但我已经严重误读了一次问题。 -
附带问题,为什么是指向
vector的指针?这通常是个坏主意。 -
你可以使用
std::cout << main[j]->at(i),但在你这样做之前问问自己为什么要使用指针。这段代码没有充分的理由。 -
不要新建你的向量,这完全没有必要。向量已经动态地管理自己的内存。您唯一要做的就是增加一定程度的间接性并使您自己的事情变得更加困难。也看看这里:isocpp.github.io/CppCoreGuidelines/…