问题标签 [stdlist]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
3973 浏览

c++ - 将对象添加到 std::list 时调用对象的析构函数

我有一个 Foo 对象和一个 std::list 保存它的实例。我的问题是,当我向列表中添加一个新实例时,它首先调用 ctor,然后调用 dtor。然后是另一个实例上的 dtor(根据 this 指针)。

单个实例被添加到列表中,但由于调用了它的 dtor(连同它的父级),因此无法按预期使用该对象。

下面是一些简化的代码来说明问题:

0 投票
2 回答
405 浏览

c++ - Can't push_front() 一个标准库列表与我在 C++ 中的对象

我有一个类,我想使用标准库列表来存储它们的列表。我本质上想 push_front() 列表。所以我的代码是这样的:

但是编译器会抛出这个错误:

错误:对 'complexList' 中的成员 'push_front' 的请求,它是非类类型 'std::list<complexNode, std::allocator<complexNode> > ()()'</p>

complexNode 类有一个复制构造函数。

我真的不明白这个问题以及该错误的实际含义......请帮助!

0 投票
4 回答
1823 浏览

c++ - C++ 在 std::list<> 中存储大数据 ..我应该使用引用计数吗?

人们通常如何管理复制大型对象列表?

这是我的情况:

目前我有这个:

我把它存储在一个

Image.size() 非常大(每个约为 3-5 MB)。

我正在传递(复制)列表。

我对 std::vector 将按值复制每个元素的理解是否正确?如果是这样,由于过度复制,性能可能会有点糟糕?

我可以做些什么来减少复制?我应该改为存储

在哪里

?

处理此类问题的优雅方式是什么?

0 投票
1 回答
1550 浏览

c++ - 在 std::list 上迭代中的项的指针

我正在开发一个非常基本的游戏,并且我有一个 std::list 与我的游戏相关的对象集合。我将其声明为:

当我迭代它时,使用

我的对象没有在 GUI 上更新。但是,用 a 替换迭代循环targets.front().move(),我的一个对象会正确移动。我认为这是因为我没有使用指针迭代集合。谁能解释这是怎么做的?谢谢。

0 投票
2 回答
525 浏览

c++ - C++ 链表行为

我有一些 C 代码,其中有两个链表(比如 A 和 B),A 插入到 B 的特定位置,A 仍然有元素。

如何使用 C++ STL 有效地模拟相同的行为?如果我尝试拼接,它会使第二个空。

谢谢,戈库尔。

0 投票
1 回答
59 浏览

multithreading - 哪些免费工具或策略可以帮助调试多线程损坏错误?

我有一个具有多线程的客户端服务器应用程序。服务器端失败,std::list 损坏导致 SEGV。我怀疑存在某种跨线程计时问题,两个线程同时更新 std::list 并导致其损坏。

请建议免费工具来追踪这一点或可能有帮助的策略。

0 投票
5 回答
3904 浏览

c++ - 将 std::list 公开为只读

我有一个类,其中包含一个 std::list 等。我想公开这个列表,但只能以它包含的结构和数据是只读的方式公开,但仍然可以与迭代器一起使用。

我让它“工作”的方式是返回列表的副本。这让我的班级“安全”,但当然不会阻止调用者修改他们的列表副本并且没有获得正确的数据。

有没有更好的办法?

0 投票
0 回答
1318 浏览

core - core dump during std::_List_node_base::unhook()

I have a program where std::list is used. The program uses threads which act on the std::list as producers and consumers.

When a message is dealt with by the consumer, it is removed from the list using pop_front(). But, during pop_front, there is a core dump.

The gdb trace is as below. could you help getting me some insights into this issue?

0 投票
2 回答
239 浏览

c++ - 推回对象,然后在 std::list 中的先前位置将其擦除

请注意,顺序可以采用任何一种方式(先擦除然后推回,只是这种方式不需要创建对对象的本地引用)。

这个想法是,如果函数发现一个对象与传递的对象发生冲突,它将该对象添加到列表的末尾,将其从当前位置删除,然后返回该对象。我不认为迭代器失效是一个问题,因为我在擦除后立即返回?

该代码导致程序崩溃。

PS cppreference 说擦除“删除”对象,但我认为这只是将其从列表中删除。(如果这是错误的,我怎样才能通过它的位置删除一个元素。我正在阅读的删除函数文档只允许传递对象的值)。

编辑:崩溃的位置并不总是相同的,但它是由于这段代码而发生的(即,如果我恢复它,则正常运行)。什么导致可变时间延迟崩溃?我不希望发现的对象被销毁。

编辑 发现错误,将对象移动到列表末尾时,导致 2 个 GameObjects 碰撞之间的无限循环。抱歉,无法从发布的代码中破译。

0 投票
2 回答
2613 浏览

c++ - std::list remove 在指针上调用删除?

由于我无法弄清楚的段错误,我在我的程序上运行了 valgrind。它在这里检测到一个问题...

删除是在这种方法...

我不认为从列表中删除指针会调用delete它。这里有什么可疑之处?如果您需要更多信息,请告诉我。

PS 以前在调试时,我注意到问题的发生是因为 GetTileX 和 GetTileY不是有效的索引,并且会返回像 13775864 这样的荒谬数字。我认为这与delete问题有关,并且删除或 push_back 导致了问题。

编辑:这是另一个代码片段

AdjustGridCoord 会使迭代器无效吗?