我正在尝试将所有顶点从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();
输出:
我尝试过将'顶点'复制到矢量的不同方法,但结果是一样的:
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);
}
那么,我应该怎么做呢? 我非常感谢你的帮助!
答案 0 :(得分:1)
创建矢量后,它的大小为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
解决方案:不要设置初始大小,而是设置reserve
:
std::vector< vertex > *rVector = new std::vector< vertex >();
rVector->reserve(verticesNumb);
答案 1 :(得分:1)
这里是初始化大小为verticesNumb
std::vector< vertex > *rVector = new std::vector< vertex >(verticesNumb);
稍后您将使用push_back
添加到向量的末尾。这就是为什么它的两倍超过你的期望。
在矢量上使用reserve:
std::vector< vertex > *rVector = new std::vector< vertex >();
rVector ->reserve(verticesNumb);