调用std :: vector :: push_back()会更改vector中的先前元素吗?

罗宾

首先,一些简化的代码:

#ifndef UNDIRECTED_GRAPH_HPP
#define UNDIRECTED_GRAPH_HPP

#include <vector>
#include <iostream>

template <typename T>
struct undirected_graph
{
    struct node
    {
        T data;
    };

    struct edge
    {
        node& node0;
        node& node1;
    };

    ~undirected_graph() {
        for (auto n : nodes_) delete n;
        for (auto e : edges_) delete e;
    }

    const node& add_new_node(const T& data);

private:
    std::vector<node*> nodes_;
    std::vector<edge*> edges_;
};

template <typename T>
const typename undirected_graph<T>::node&
undirected_graph<T>::add_new_node(const T& data)
{
    node *n = new node { data };
    nodes_.push_back(n);
    for (auto x : nodes_) std::cout << x->data.pos.x << "," << x->data.pos.y << std::endl;
    return *n;
}

#endif

该问题存在于中undirected_graph::add_new_node(const T& data)我将输出添加到控制台用于调试目的,因为到目前为止,我仅将此类与自己的数据类型一起使用。每次我调用此方法时,似乎nodes_矢量中的先前条目都被更改为最后一个元素。

我认为这可能与我选择存储在图形中的数据类型有关,因此我还要添加调用它的代码部分:

// Somewhere in dungeon_generator.cpp ...
undirected_graph<const DungeonLayout::Room&> graph;

for (auto room : dungeon->rooms) {
    graph.add_new_node(room);
}

所以我的方法有缺陷,或者我的调用方式有缺陷,或者两者都有。但我似乎无法找出问题所在!有人可以帮帮我吗?

为了进一步说明问题,我向该方法添加了两次调用的输出。所述dungeons_->rooms容器包含一堆房间随机生成的位置(可以通过表示为pos属性)

2,2
9,9
9,9
3,2
3,2
3,2
2,6
2,6
2,6
2,6
9,3
9,3
9,3
9,3
9,3
亨里克

似乎您在存储对临时变量的引用room更改

undirected_graph<const DungeonLayout::Room&> graph;

undirected_graph<DungeonLayout::Room> graph;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

调用std :: vector :: push_back()会更改vector中的先前元素吗?

来自分类Dev

OpenMP 并行区域中的 std::vector push_back 会导致错误共享吗?

来自分类Dev

当push_back新元素添加到std :: vector时,C ++参考更改

来自分类Dev

MSVC中std :: vector :: push_back的实现

来自分类Dev

std :: vector函数push_back中的奇怪段错误

来自分类Dev

std :: vector中push_back函数的奇怪语法

来自分类Dev

MSVC中std :: vector :: push_back的实现

来自分类Dev

在std :: vector上调用delete

来自分类Dev

为什么要在std :: vector :: push_back(T object)方法中构造对象时调用析构函数?

来自分类Dev

用std :: vector <mutex *>调用std :: lock()

来自分类Dev

用std :: vector <mutex *>调用std :: lock()

来自分类Dev

并行调用 std::vector 中的函数

来自分类Dev

C ++ std :: vector可以同时处理来自多线程的push_back吗?

来自分类Dev

C ++ std :: vector可以同时处理来自多线程的push_back吗?

来自分类Dev

std :: vector :: push_back的成本是成功还是无效?

来自分类Dev

push_back期间std :: vector分段错误

来自分类Dev

关于`std :: vector :: push_back`的小数的选择

来自分类Dev

线程安全性std :: vector push_back并保留

来自分类Dev

OpenCV点的std :: vector,没有push_back方法

来自分类Dev

std::vector<>::push_back 导致 Arduino 链接错误

来自分类Dev

想要简化我的 std::vector push_back 用法

来自分类Dev

错误:没有匹配的函数调用vector :: push_back

来自分类Dev

std :: vector <std :: vector <int >> push_back导致堆缓冲区溢出

来自分类Dev

不匹配调用 '(std::vector<std::vector<int> >) (int, std::vector<int>)'

来自分类Dev

将指针数组推入std :: vector中,避免使用push_back复制对象

来自分类Dev

std :: vector const元素更改

来自分类Dev

修复在std :: vector <std :: vector <UC>> lum中调用'assign'的错误无匹配函数;

来自分类Dev

为什么在对std :: vector :: emplace_back()的调用中调用了复制构造函数?

来自分类Dev

在std :: vector push_back()和std :: map运算符中使用&&作为参数[]

Related 相关文章

  1. 1

    调用std :: vector :: push_back()会更改vector中的先前元素吗?

  2. 2

    OpenMP 并行区域中的 std::vector push_back 会导致错误共享吗?

  3. 3

    当push_back新元素添加到std :: vector时,C ++参考更改

  4. 4

    MSVC中std :: vector :: push_back的实现

  5. 5

    std :: vector函数push_back中的奇怪段错误

  6. 6

    std :: vector中push_back函数的奇怪语法

  7. 7

    MSVC中std :: vector :: push_back的实现

  8. 8

    在std :: vector上调用delete

  9. 9

    为什么要在std :: vector :: push_back(T object)方法中构造对象时调用析构函数?

  10. 10

    用std :: vector <mutex *>调用std :: lock()

  11. 11

    用std :: vector <mutex *>调用std :: lock()

  12. 12

    并行调用 std::vector 中的函数

  13. 13

    C ++ std :: vector可以同时处理来自多线程的push_back吗?

  14. 14

    C ++ std :: vector可以同时处理来自多线程的push_back吗?

  15. 15

    std :: vector :: push_back的成本是成功还是无效?

  16. 16

    push_back期间std :: vector分段错误

  17. 17

    关于`std :: vector :: push_back`的小数的选择

  18. 18

    线程安全性std :: vector push_back并保留

  19. 19

    OpenCV点的std :: vector,没有push_back方法

  20. 20

    std::vector<>::push_back 导致 Arduino 链接错误

  21. 21

    想要简化我的 std::vector push_back 用法

  22. 22

    错误:没有匹配的函数调用vector :: push_back

  23. 23

    std :: vector <std :: vector <int >> push_back导致堆缓冲区溢出

  24. 24

    不匹配调用 '(std::vector<std::vector<int> >) (int, std::vector<int>)'

  25. 25

    将指针数组推入std :: vector中,避免使用push_back复制对象

  26. 26

    std :: vector const元素更改

  27. 27

    修复在std :: vector <std :: vector <UC>> lum中调用'assign'的错误无匹配函数;

  28. 28

    为什么在对std :: vector :: emplace_back()的调用中调用了复制构造函数?

  29. 29

    在std :: vector push_back()和std :: map运算符中使用&&作为参数[]

热门标签

归档