gpt4 book ai didi

c++ - 从图形复制到 vector 后顶点数增加

转载 作者:搜寻专家 更新时间:2023-10-31 02:21:00 25 4
gpt4 key购买 nike

我正在尝试将所有顶点从 boost::adjacency_list 复制到 std::vector
但是在这样做之后,std::vector 中的顶点数量增加了两倍。
代码示例:

typedef boost::adjacency_list<boost::listS, boost::vecS> revision_graph;
typedef boost::graph_traits<revision_graph>::vertex_descriptor vertex;

revision_graph graph;
int verticesNumb = num_vertices(graph);
std::cout << "NUMBER OF VERTICES IN GRAPH: " << verticesNumb << "\n";
std::vector< vertex > *rVector = new std::vector< vertex >(verticesNumb);
std::cout << "VECTOR SIZE AFTER INIT: " << rVector->size();
BGL_FORALL_VERTICES(v, graph, revision_graph)
{
rVector->push_back(v);
}
std::cout << "VECTOR SIZE AFTER COPYING: " << rVector->size();

输出:

  • 图中的顶点数:139
  • 初始化后的 vector 大小:139
  • 复制后的 vector 大小:278

我尝试了将顶点“复制”到 vector 的不同方法,但结果是一样的:

boost::graph_traits< revision_graph >::vertex_iterator vi, vi_end;
for(boost::tie(vi, vi_end) = boost::vertices(graph); vi != vi_end; ++vi)
{
rVector->push_back(*vi);
}

那么,我应该怎么做呢?
非常感谢您的帮助!

最佳答案

在您创建 vector 之后,它的大小已经是 verticesNumb。然后你 push_back 另一个 verticesNumb 元素,总计 2 * verticesNumb

考虑这个简单的例子:

#include <vector>
#include <iostream>

int main()
{
const int size = 100;
std::vector<int> vec(size);

for (int i = 0; i<100; ++i)
{
vec.push_back(i);
}

std::cout << vec.size() << std::endl;
return 0;
}

output

200

解决方案:不要设置初始大小,而是保留它:

std::vector< vertex > *rVector = new std::vector< vertex >();
rVector->reserve(verticesNumb);

关于c++ - 从图形复制到 vector 后顶点数增加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31963808/

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