问题标签 [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.
c++ - std::list 和有什么区别和 C++ STL 中的 std::map ?
std::list<std::pair>
和 和有什么不一样std::map
?列表也有find
方法吗?
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_bound
andupper_bound
会更合适。
事实是我想以一种有效的方式加入insert
元素。std::map
所以我想使用一个额外的迭代器来insert
加快速度。
我相信最简单的方法是使用 a来const_reverse_iterator
遍历std::list
和使用begin()
.std::map
你会这样做,还是一个坏主意?
谢谢!
c++ - 轻松初始化 std::strings 的 std::list?
在 C++0x 中,我想要的是:
标准的非 0x C++ 中最简单的方法是什么?
c++ - 如何确保迭代器不会越过 end()?
我一直在使用advance
一些iterators
,但我怕上面有可能的越级end()
。我想确保我的迭代器保持在界限之间,我想到了,distance
但它似乎没有返回我所期望的(迭代器越过时的非正值end()
)。你如何确保没有越级?
这是输出:
c++ - std::list 固定大小
如何std::list
使用固定元素数创建?
c++ - OpenMP 并行化和从列表向量中删除
帮派。首先,对问题和方法的高级描述。
我有一个包含每个图像中的图像和像素位置的列表 - 一个列表列表。我想从该图像列表中随机选择n 个项目,并且对于每个图像我想迭代k个随机像素位置。我想并行执行此操作。对于每个处理过的像素,我希望将其从列表中删除。
我的方法是在所有线程之间分配图像和像素列表——因此每个线程都有自己的图像列表和像素位置列表,但没有两个线程会同时处理同一个图像。我将这些存储到一个向量中。
所以假设代码看起来像这样:
然后,mainList[0]
将包含要由 id 为 0 的线程处理的图像。我以以下方式启动线程:#pragma omp parallel num_threads(numThreads_)
然后它们都运行同一段代码,该代码从线程的图像列表中随机采样图像。
问题是,当一个像素被处理并且一个线程从像素列表中删除它时,例如mainList[0].begin()->pixels_.erase(someIter)
,我有时会得到一个断言;它追溯到删除运算符。
我知道写入 std::list 不是线程安全的,但我很确定它对于列表列表是安全的,其中主列表中的每个列表只能由一个线程访问。我知道我提供了有限的代码,但问题归结为从列表列表(或列表向量)中并行删除,当每个线程一次只能访问一个列表并且列表不在线程之间共享时。
我在这里想念什么?我不能从列表列表的向量中并行删除吗?
c++ - 列表迭代器 + 运算符
所以我这里有世界上最糟糕的一段代码。有一个更好的方法吗?
当使用 '+ 1' 我得到这个:
c++ - c++ std::list sort 保留顺序
可能重复:
std::list<>::sort 稳定吗?
是否保证 C++ std::list 排序函数保留列表中相等元素的顺序?例如,如果我们在列表中有对象 A、B 和 C,并且比较运算符被重载,使得 A == C 和 B < A,我们一定会得到 BAC 还是有可能得到 BCA?
c++ - 使用列表列表时的内存泄漏
我收到了一些代码来“生产”。我运行了一个内存泄漏检查器,它在下面的“for”循环中调用以下行作为内存泄漏。
以下是数组映射的声明方式:
以下是它的几个用法:
在我杀死它之前,内存泄漏检查器转储了 5 分钟。然后我在清理例程中添加了以下代码,但它仍然转储出 150 个警告,所有这些警告都指向顶部 for 循环中的代码行。
如何完全删除与此数组映射关联的内存?
c++ - 通过插入保持 std::list 迭代器有效
注意:这不是我应该“使用列表还是双端队列”的问题。这是一个关于迭代器有效性的问题insert()
。
这可能是一个简单的问题,我太密集了,看不到正确的方法。我正在将网络流量缓冲区(无论好坏)实现为 a std::list<char> buf
,并且我将当前的读取位置保持为 iterator readpos
。
当我添加数据时,我会做类似的事情
我现在的问题是,如何保持readpos
迭代器有效?如果它指向buf
旧readpos == buf.end()
. 插入后,我希望readpos
始终指向下一个未读字符,在插入的情况下应该是第一个插入的字符。
有什么建议么?(没有将缓冲区更改为 a std::deque<char>
,这似乎更适合该任务,如下所示。)
更新:从 GCC4.4 的快速测试中,我观察到 deque 和 list 的行为不同readpos = buf.end()
:在末尾插入后,readpos 在列表中被破坏,但指向 deque 中的下一个元素。这是标准保证吗?
(根据cplusplus,任何 deque::insert()都会使所有迭代器失效。这不好。也许使用计数器比迭代器更好地跟踪双端队列中的位置?)