gpt4 book ai didi

c++ - vector 中的指针问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:40:08 24 4
gpt4 key购买 nike

我试图重温我的 C++,因为我已经有一段时间没有使用它了,而且我在存储指针方面遇到了问题。在下面的方法结束时, vector “图形”具有我插入的所有顶点,但应该添加的边已损坏(我可以在调试器中看到边,但它们的数据是垃圾)。不知有没有人帮忙指导一下?

谢谢!

作为引用,add_edge 函数声明如下:

std::vector<vertice*> m_edges;
...
...
void add_edge(vertice* n);
{
m_edges.push_back(n);
}

主要问题:

std::vector<vertice> graph;
std::string line;

//Iterate over line
int lineCount = 0;
while(getline(file, line))
{
auto vertices = parse_line(line);
for(size_t i = 0; i < vertices.size(); ++i)
{
auto result = std::find_if(
graph.begin(),
graph.end(),
[&] (vertice cVert) { return cVert.getName() == vertices.at(i); });

std::vector<vertice>::size_type currPos =
std::distance(graph.begin(), result);

if(result == graph.end())
{
graph.emplace_back(vertice{vertices.at(i)});
}

if(i == 0) { continue; }
graph.at(lineCount).add_edge(currPos == graph.size() ?
&graph.back() : &graph.at(currPos));
}

++lineCount;
}

//The vector graph has corrupt nodes here

最佳答案

指向 std::vector 内容的指针插入新元素时可能会失效,例如在 std::vector::emplace_back 中:

If the new size() is greater than capacity() then all iterators and references (including the past-the-end iterator) are invalidated. Otherwise only the past-the-end iterator is invalidated.

考虑 std::vector::reserve在需要重新分配元素或使用不同的容器之前保留容量,一个不会使插入时的引用无效的容器,可能是 std::list .

关于c++ - vector 中的指针问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30181923/

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