gpt4 book ai didi

c++ - 访问 vector> 元素

转载 作者:太空宇宙 更新时间:2023-11-04 16:01:24 25 4
gpt4 key购买 nike

我已经定义了:

const  vector<vector<int>> *ElementLines::Quad4 = new vector<vector<int>>
{
{ 0, 1 },
{ 1, 2 },
{ 2, 3 },
{ 3, 0 }
};

稍后,我想遍历对象指向的那个集合:

for (int j = 0; j < e->LinesIndices->size(); j++)
{
int n1Index = e->LinesIndices[j][0]; //I expect 0 (for j = 0)
int n2Index = e->LinesIndices[j][1]; //I expect 1 (for j= 0)
}

上面的代码不会编译:

no suitable conversion function from "const std::vector<int, std::allocator<int>>" to "int" exists  

但是如果我添加 LinesIndices[j][0][0] 它确实会提供一个 int。我不太明白这里发生了什么。要访问一个 vector ,我只使用一对方括号[i],这个嵌套的 vector vector 有什么不同吗? (我希望能够通过使用两对方括号访问内容)。

最佳答案

您的代码未编译,因为您的 e->LinesIndicesvector<vector<int>>* (即指针)。

在 C++ 中,与在 C 中一样,您可以在指针上使用数组表示法— a[index] is equivalent to *(a + index) .如果您的指针指向数组的第一个元素,这正是您使用该数组的方式。不幸的是,您只有一个通过 new 分配的 vector .通过 e->LinesIndices[j] 访问该指针如果 j 是一件非常糟糕的事情不为 0(因为您访问了一个没有实际 vector 的 vector )。

有两种方法可以解决这个问题。如果你真的想把你的 vector 放在堆上,通过 new 分配(我希望你在某个时候 delete 它!),你可以在访问它之前取消引用指针:

for (int j = 0; j < e->LinesIndices->size(); j++)
{
int n1Index = (*e->LinesIndices)[j][0];
int n2Index = e->LinesIndices[0][j][1]; // This would work too, but I wouldn't recommend it
}

然而,你的 vector 中的数据已经在堆上了。分配 std::vector通过new是——根据我个人的经验——很少需要的东西,如果你没有必要在这里有一个指针(这在很大程度上取决于你使用它的上下文),我建议直接创建 vector (用没有指针)。如果选择此方法,则需要使用 e->LinesIndices.size()而不是 e->LinesIndices->size() .

关于c++ - 访问 vector<vector<int>> 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43341153/

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