问题标签 [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 投票
7 回答
69305 浏览

c++ - std::list 和有什么区别和 C++ STL 中的 std::map ?

std::list<std::pair>和 和有什么不一样std::map?列表也有find方法吗?

0 投票
3 回答
1835 浏览

c++ - 如何将 std::pair 的排序 std::list 转换为 std::map

我有一个std::list< std::pair<std::string,double> >,我知道它是根据std::string element.

由于我想做很多std::find_if基于std::string元素的事情,我相信一个std::map<string,double,MyOwnBinaryPredicate>with lower_boundandupper_bound会更合适。

事实是我想以一种有效的方式加入insert元素。std::map所以我想使用一个额外的迭代器来insert加快速度。

我相信最简单的方法是使用 a来const_reverse_iterator遍历std::list和使用begin().std::map

你会这样做,还是一个坏主意?

谢谢!

0 投票
1 回答
9038 浏览

c++ - 轻松初始化 std::strings 的 std::list?

在 C++0x 中,我想要的是:

标准的非 0x C++ 中最简单的方法是什么?

0 投票
6 回答
12165 浏览

c++ - 如何确保迭代器不会越过 end()?

我一直在使用advance一些iterators,但我怕上面有可能的越级end()。我想确保我的迭代器保持在界限之间,我想到了,distance但它似乎没有返回我所期望的(迭代器越过时的非正值end())。你如何确保没有越级?

这是输出:

0 投票
4 回答
11982 浏览

c++ - std::list 固定大小

如何std::list使用固定元素数创建?

0 投票
1 回答
1073 浏览

c++ - OpenMP 并行化和从列表向量中删除

帮派。首先,对问题和方法的高级描述。

我有一个包含每个图像中的图像和像素位置的列表 - 一个列表列表。我想从该图像列表中随机选择n 个项目,并且对于每个图像我想迭代k个随机像素位置。我想并行执行此操作。对于每个处理过的像素,我希望将其从列表中删除。

我的方法是在所有线程之间分配图像和像素列表——因此每个线程都有自己的图像列表和像素位置列表,但没有两个线程会同时处理同一个图像。我将这些存储到一个向量中。

所以假设代码看起来像这样:

然后,mainList[0]将包含要由 id 为 0 的线程处理的图像。我以以下方式启动线程:#pragma omp parallel num_threads(numThreads_)然后它们都运行同一段代码,该代码从线程的图像列表中随机采样图像。

问题是,当一个像素被处理并且一个线程从像素列表中删除它时,例如mainList[0].begin()->pixels_.erase(someIter),我有时会得到一个断言;它追溯到删除运算符。

我知道写入 std::list 不是线程安全的,但我很确定它对于列表列表是安全的,其中主列表中的每个列表只能由一个线程访问。我知道我提供了有限的代码,但问题归结为从列表列表(或列表向量)中并行删除,当每个线程一次只能访问一个列表并且列表不在线程之间共享时。

我在这里想念什么?我不能从列表列表的向量中并行删除吗?

0 投票
5 回答
1384 浏览

c++ - 列表迭代器 + 运算符

所以我这里有世界上最糟糕的一段代码。有一个更好的方法吗?

当使用 '+ 1' 我得到这个:

0 投票
2 回答
914 浏览

c++ - c++ std::list sort 保留顺序

可能重复:
std::list<>::sort 稳定吗?

是否保证 C++ std::list 排序函数保留列表中相等元素的顺序?例如,如果我们在列表中有对象 A、B 和 C,并且比较运算符被重载,使得 A == C 和 B < A,我们一定会得到 BAC 还是有可能得到 BCA?

0 投票
2 回答
465 浏览

c++ - 使用列表列表时的内存泄漏

我收到了一些代码来“生产”。我运行了一个内存泄漏检查器,它在下面的“for”循环中调用以下行作为内存泄漏。

以下是数组映射的声明方式:

以下是它的几个用法:

在我杀死它之前,内存泄漏检查器转储了 5 分钟。然后我在清理例程中添加了以下代码,但它仍然转储出 150 个警告,所有这些警告都指向顶部 for 循环中的代码行。

如何完全删除与此数组映射关联的内存?

0 投票
4 回答
6838 浏览

c++ - 通过插入保持 std::list 迭代器有效

注意:这不是我应该“使用列表还是双端队列”的问题。这是一个关于迭代器有效性的问题insert()


这可能是一个简单的问题,我太密集了,看不到正确的方法。我正在将网络流量缓冲区(无论好坏)实现为 a std::list<char> buf,并且我将当前的读取位置保持为 iterator readpos

当我添加数据时,我会做类似的事情

我现在的问题是,如何保持readpos迭代器有效?如果它指向bufreadpos == buf.end(). 插入后,我希望readpos 始终指向下一个未读字符,在插入的情况下应该是第一个插入的字符。

有什么建议么?(没有将缓冲区更改为 a std::deque<char>,这似乎更适合该任务,如下所示。)

更新:从 GCC4.4 的快速测试中,我观察到 deque 和 list 的行为不同readpos = buf.end():在末尾插入后,readpos 在列表中被破坏,但指向 deque 中的下一个元素。这是标准保证吗?

(根据cplusplus,任何 deque::insert()都会使所有迭代器失效。这不好。也许使用计数器比迭代器更好地跟踪双端队列中的位置?)