C++ 列表向量无法复制新元素

C++ 列表向量无法复制新元素,c++,algorithm,list,vector,push-back,C++,Algorithm,List,Vector,Push Back,我的目标是通过Dijkstra算法找到从图中每个节点到其他节点的最短路径,包括彼此不同的等长路径。为了存储这些路径,每个节点在图中为每个其他节点都有一个向量,该向量存储包含每个最小路径的列表向量(通常只有一个列表,但如果存在多个最短路径,则偶尔会有更多列表)。每个节点都有一个这样的数据结构,一个向量包含所有这些数据结构——所以一个向量向量就是一个列表向量 第二个目标是使用最短路径列表来解决TSP问题,而不是逐边使用 因此,作为算法的一部分,我试图将一个节点的所有列表收集到一个列表向量中。换句话说

我的目标是通过Dijkstra算法找到从图中每个节点到其他节点的最短路径,包括彼此不同的等长路径。为了存储这些路径,每个节点在图中为每个其他节点都有一个向量,该向量存储包含每个最小路径的列表向量(通常只有一个列表,但如果存在多个最短路径,则偶尔会有更多列表)。每个节点都有一个这样的数据结构,一个向量包含所有这些数据结构——所以一个向量向量就是一个列表向量

第二个目标是使用最短路径列表来解决TSP问题,而不是逐边使用

因此,作为算法的一部分,我试图将一个节点的所有列表收集到一个列表向量中。换句话说,我正在尝试将列表的二维向量转换为列表的一维向量

我在二维向量中找到的每一个列表,我都试图推进到一维向量中。发生的情况是,第一个列表在其所有元素都已就位的情况下正确复制,但以下尝试推送列表会添加一个空列表。否则代码将正确编译和执行

vector<vector<vector<list<road_data>>>> all_shortest_paths;
...
...
...

int ex_path_search(int current_city, int current_distance, int best_distance) {


    vector<list<road_data>> priority_paths;


    for(int i = 0; i < all_shortest_paths[current_city].size(); i++) {
        for(int j=0; j<all_shortest_paths[current_city][i].size(); j++) {

            //an attempt to fix the dysfunctional copy by making a separate list first
            list<road_data> shortpath = all_shortest_paths[current_city][i][j];

            //first iteration copies correctly, each following iteration copies an empty list
            priority_paths.push_back(shortpath);

        }
    }
向量所有最短路径;
...
...
...
整数倍路径搜索(整数倍当前城市、整数倍当前距离、整数倍最佳距离){
向量优先权路径;
对于(int i=0;i<所有最短路径[当前城市].size();i++){

对于(int j=0;jAre这些是
std::list
s和
std::vector
s?你能包括一个你期望通过的失败测试吗?你能包括产生失败案例的简单测试数据吗?是的。我只是使用过去对我有效的结构。我首先提供给它的图只有四个节点,并随机生成edges,所以它们没有太多,每个节点只有三条最短路径。例如,对于包含边的图a-B-C-D,a-D权重9、D-C权重4和C-B权重2,将生成所有正确的最短路径,但如前所述失败。