问题标签 [stl]

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 投票
10 回答
95869 浏览

c++ - 如何初始化'const std::vector' 像 ac 数组

有没有一种优雅的方法来创建和初始化const std::vector<const T>一个const T a[] = { ... }固定(和少量)数量的值?
我需要经常调用一个需要 a 的函数vector<T>,但在我的情况下这些值永远不会改变。

原则上我想到了类似的东西

因为 v 不会在这个编译单元之外使用。

0 投票
5 回答
5483 浏览

c++ - std::map operator[] 中的违规读取位置

我在运行一些传给我的旧代码时遇到了问题。它在 99% 的时间内都有效,但有时我注意到它会抛出“违反读取位置”异常。我有可变数量的线程可能在整个进程的生命周期内执行此代码。低发生频率可能​​表明存在竞争条件,但我不知道为什么在这种情况下会导致异常。这是有问题的代码:

在地图的 operator[] 实现中抛出异常,在第一次调用 operator[] 时(使用 STL 的 VS2005 实现。)

我已经尝试在 operator[] 中冻结线程并尝试让它们同时运行,但我无法使用该方法重现异常。

你能想出为什么会抛出的任何原因,而且只是在某些时候?

(是的,我知道 STL 不是线程安全的,我需要在这里进行更改。我很好奇为什么我会看到上面描述的行为。)

根据要求,此处提供有关异常的更多详细信息:
app15-51-02-0944_2008-10-23.mdmp 中 0x00639a1c (app.exe) 处的未处理异常:0xC0000005:访问冲突读取位置 0x00000004。

感谢大家提出多线程问题的解决方案,但这不是这个问题要解决的问题。是的,我理解所提供的代码没有得到正确的保护,并且在它试图完成的事情上是矫枉过正的。我已经实现了它的修复。我只是想更好地理解为什么会引发这个异常。

0 投票
7 回答
22712 浏览

c++ - 使用 STL 查找向量中的所有元素

我有一个需要操作的元素集合,在集合上调用成员函数:

对于不带参数的调用函数,它非常简单:

如果我希望调用的函数有一个参数,则可以做类似的事情。

我的问题是,如果满足某些条件,我想在向量中的元素上调用一个函数。 std::find_if返回满足谓词条件的第一个元素的迭代器。

我希望找到满足谓词的所有元素并对其进行操作。

我一直在寻找“ find_all”或“ do_if”等价物的 STL 算法,或者我可以用现有的 STL 做到这一点的方法(这样我只需要迭代一次),而不是自己滚动或简单地做一个标准使用 for 循环和比较进行迭代。

0 投票
8 回答
4276 浏览

c++ - 在一组中保存一堆 const char* 的最简单、最安全的方法?

我想将一堆 const char 指针保存到 std::set 容器 [1] 中。std::set 模板需要一个比较器函子,标准 C++ 库提供了 std::less,但它的实现是基于直接比较两个键,这不是指针的标准。

我知道我可以定义自己的仿函数并通过将指针转换为整数并进行比较来实现 operator(),但是有没有更干净、“标准”的方法呢?

请不要建议创建 std::strings - 这是浪费时间和空间。字符串是静态的,因此可以根据它们的地址比较它们的(不)相等性。

1:指针指向静态字符串,所以它们的生命周期没有问题——它们不会消失。

0 投票
4 回答
12226 浏览

c++ - 有没有一种标准的方法来使用 stl 在 linux 上使用 gcc 进行 findfirst、findnext?

我似乎无法在 gcc for Linux 上找到 _findfirst / findfirst、_findnext / findnext API,如果它包含在那里,我实际上宁愿使用标准模板库 (STL)。

有谁知道有哪些 API 可用于在 Linux for C++ (gcc) 下列出目录中的文件?

0 投票
13 回答
35331 浏览

c++ - How do I sort a std::vector by the values of a different std::vector?

I have several std::vector, all of the same length. I want to sort one of these vectors, and apply the same transformation to all of the other vectors. Is there a neat way of doing this? (preferably using the STL or Boost)? Some of the vectors hold ints and some of them std::strings.

Pseudo code:

0 投票
7 回答
79919 浏览

c++ - std::vector 与 std::list 与 std::slist 的相对性能?

对于不需要随机访问列表元素的简单链表,使用std::list而不是有任何显着优势(性能或其他方面)std::vector吗?如果需要向后遍历,在迭代其元素之前使用std::slist和列表会更有效吗?reverse()

0 投票
10 回答
6336 浏览

c++ - STL 排序条件可能改变的集合

我有一个定义了自定义排序的 C++ STL 集。

这个想法是,当项目被添加到集合中时,它们自然会按照我想要的顺序排列。

但是,我刚刚意识到,排序谓词会随着时间的推移而改变。

据推测,集合中的项目将不再按顺序排列。

所以真的有两个问题:

  1. 物品出现故障是否有害?我是否正确地说,可能发生的最坏情况是新条目可能会被放入错误的位置(实际上我可以忍受)。或者,这会导致崩溃、丢失条目等吗?

  2. 有没有办法“刷新”集合的顺序?您似乎无法在集合上使用 std::sort() 。我能想到的最好的办法是将内容转储到临时容器中并重新添加它们。

有任何想法吗?

谢谢,

约翰

0 投票
4 回答
2091 浏览

c++ - 如何创建通用 std::vector 析构函数?

拥有一个包含指向对象的指针的向量,然后使用 clear 函数不会调用向量中对象的析构函数。我创建了一个函数来手动执行此操作,但我不知道如何将其作为向量中可能存在的任何类型对象的通用函数。

这是我拥有的函数,它适用于向量中的特定类型的对象,但我想要一个可以采用任何类型的向量和对象指针的函数。

0 投票
4 回答
159932 浏览

c++ - 我想将 std::string 转换为 const wchar_t *

有什么方法吗?我的电脑是AMD64。

当我使用:

VS2005 编译器说:

我该怎么做?