如何复制列表矢量
How to copy a vector of lists?
在我的程序中,我需要将private
数据结构复制(甚至使用)到一个完全不同的类的.cpp文件中。目前,我甚至无法简单地远程访问它,当我试图打印它时,它会出错
class Graph
{
private:
class Edge
{
public:
Edge(string vertex, int weight)
{
m_vertex = vertex;
m_weight = weight;
}
~Edge(){}
string m_vertex;
int m_weight;
};
vector< list<Edge> > adjList;
public:
Graph();
~Graph();
vector < list < Edge > > get_adjList(){return adjList;}
//Other functions....
};
在一个完全不同的功能中,我尝试这样做。。。
void MinPriority::testPrint(string targetVertex) //FOR TESTING PURPOSES SO FAR (FAILS TO WORK) SEGMENTATION FAULT NO MATTER WHAT
{
targetVertex = "A";
Graph graph;
graph.adjList = graph.get_adjList(); //adjList is our empty container based on the array of linked lists
/*1*/cout << graph.get_adjList()[0].front().m_vertex << " TEST!" << endl;
/*2*/cout << "The very first vertex is: ";
if(graph.adjList.size() == 0)
cout << "NULL<!>" << endl;
else cout << graph.adjList[0].front().m_vertex << endl;
}
请注意,我将targetVertex设置为"a",因此我的程序从im开始编译,在我的makefile中包含-Werror(赋值所需)。当我注释掉/*1*/
并运行到/*2*/
时,无论数据结构中有多少元素,输出都将始终为"The very first vertex is: NULL<!>"
。在/*1*/
,我试图打印出函数get_adjList()
返回的对象,但它在读取以下内容时出错:
Exception: STATUS_ACCESS_VIOLATION at eip=611298C5
eax=0A0A0A0A ebx=01010101 ecx=20050884 edx=F5F5F5F5 esi=20058488 edi=20060000
ebp=0028A8D8 esp=0028A8D0 program=C:cygwinhomeRyan311P5Dec16Graph.exe, pid 5612, thread main
cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
Stack trace:
Frame Function Args
0028A8D8 611298C5 (20058400, 0000000A, 20058488, 610FD3CA)
0028A938 6115F91F (0028D41C, 61187720, 0028A958, 0043455D)
0028A988 61137BF7 (0028D41C, 20058400, 00000001, 20058488)
0028A9B8 61137CD5 (20058400, 00000001, 20058488, 61187720)
0028A9D8 610D6745 (00449240, 20058400, 20058488, 004493C4)
0028AA68 004439BA (004493C0, 6123D5FC, 004452B4, 0028AAA0)
0028AB08 00402756 (0028AC20, 0028ABB0, 20010100, 004011C1)
0028AC68 00401583 (00000001, 0028AC90, 20010100, 612757A2)
0028ACF8 6100763A (00000000, 0028CD78, 61006C50, 00000000)
End of stack trace
Segmentation fault (core dumped)
简而言之,我想知道这个堆栈跟踪是什么(我以前遇到过seg错误,但从未见过)。我想知道如何正确访问#include "Graph.h"
的其他文件中Graph类的数据结构。我也不确定如何在testPrint();
中复制我的对象。为什么这在Graph.cpp
中完美地工作?
void Graph::set_array(string vertex)
{
//increment vector size by 1 and insert a new Edge object into the vector of linked lists
cout << "ADDING " << vertex << " TO VECTOR" << endl;
adjList.resize(adjList.size() + 1);
adjList[adjList.size() - 1].push_back(Edge(vertex, 0));
}
Graph graph;
正如您所说,Graph
的默认构造函数不执行任何操作。因此,在这一点上,graph.adjList
是空的。
graph.adjList = graph.get_adjList();
这是一个毫无意义的语句,它从自身的副本分配给graph.adjList
。由于它以前是空的,现在仍然是空的。
cout << graph.get_adjList()[0].front().m_vertex << " TEST!" << endl;
这试图访问graph.adjList
的(副本)的第一个元素。但是graph.adjList
是空的(即它没有第一个元素),所以这是未定义的行为。它可能是也可能不是segfault的原因,但在进行任何进一步有用的调试之前,它肯定是一个必须解决的问题。
相关文章:
- 复制列表初始化的隐式转换的等级是多少
- 链表,将列表复制到另一个列表
- 我可以从列表中获取对象并复制它们,但如何删除我复制的对象?
- C++完全复制要字符串的字符列表,而不会忽略多个空格
- 如何将列表从一个类复制到另一个类
- 如何在向量列表初始化时避免对象复制以及如何延长临时的生存期
- 在c++中为链接列表创建复制构造函数/函数
- 使用继承的指针列表复制构造函数或重载运算符=
- 构造函数初始值设定项列表未调用复制构造函数
- 如何在不复制列表的情况下将列表传递给线程,同时销毁原始列表
- 复制构造函数初始化初始化列表中的引用成员会导致指针悬空
- 将链接列表复制到linkedlist的引用
- C 单链接列表复制构造函数分割故障
- 双重列表复制构造函数:与单一列表复制构造函数有何不同
- 将带有指针的 STD 列表复制到另一个带有指针的 STD 列表
- C++列表:复制成员列表中的本地列表
- 如何通过赋值运算符重载将一个列表复制到另一个列表上?C++
- 将列表复制到C++中的地图
- c++ std 将列表复制到映射
- 链接列表复制构造函数和赋值操作符