c++11相关内容

SGI slist 和 C++11 forward_list 有什么区别?

SGI slist 和 C++11 std::forward_list 对我来说都是一样的,除非我错过了什么;两者都实现了单链表. 我认为这是有区别的,因为 C++ 标准委员会在将容器添加到 C++0x 标准库时并没有采用名称 slist,而是选择了一个新名称 forward_list. 解决方案 一个主要区别是 std::forward_list 缺少一个 size() 成员函数, ..
发布时间:2022-01-24 21:21:56 其他开发

编译器对 STL 容器中的状态分配器的支持

新的 C++11 标准需要 STL 实现来支持容器中的有状态分配器.现在主要的 STL 实现(Visual Studio 2008、2010、libstdc++)是否符合这个要求?我在 MSDN 或 libstdc++ 文档中一无所获. 解决方案 看起来 STL 容器中的状态分配器功能已经得到广泛支持.在大多数情况下,分配器的状态性不会造成麻烦.尚未得到广泛支持的是新标准处理问题情况的方式 ..
发布时间:2022-01-24 21:20:08 C/C++开发

C++ 11 等效于 java.util.ConcurrentHashMap

我发现自己一直在编写 Mutex 代码,以便同步对 std::unordered_map 和其他容器的读/写访问,以便我可以像使用 java.util.concurrent 容器一样使用它们.我正要开始编写一个包装器来封装 Mutex,但我宁愿使用一个经过良好测试的库,这样我就不会塞满线程. 有这样的图书馆吗? 解决方案 Intel 制作了一个名为 Threading Buildin ..
发布时间:2022-01-24 21:14:24 其他开发

C++“移出"容器

在 C++11 中,当我们想要将值移动(破坏性复制)到容器中时,我们可以使用 std::move 来提高效率: SomeExpensiveType x =/* ... */;vec.push_back(std::move(x)); 但我找不到任何相反的方向.我的意思是这样的: SomeExpensiveType x = vec.back();//复制!vec.pop_back();//啊 ..
发布时间:2022-01-24 21:08:41 C/C++开发

Stephen Lavavej 的 Mallocator 在 C++11 中是否相同?

8 年前,Stephen Lavavej 发表了这篇博文,其中包含简单的分配器实现,命名为“Mallocator".从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关? 解决方案 STL 自己在他的 STL 中有这个问题的答案特性和实现技术在 CppCon 2014 上的演讲(开始于 26'30). ..
发布时间:2022-01-24 21:07:28 C/C++开发

如何实现一个具有放置新和就位功能的简单容器?

我需要实现一个容器来容纳大量元素,并且由于某种原因,它必须在没有任何堆分配的情况下工作.另一个要求是,不应以任何方式复制或移动容器元素.它们必须直接构造到容器分配的内存中. 为此,我决定使用 Placement new 并将内存管理完全委托给容器实现(在 drdobbs). 此处提供了一个运行示例.(请注意,使用 new uint8_t[size] 和 std::queue 只是为了保 ..
发布时间:2022-01-24 20:47:22 C/C++开发

为什么 std::vector 是连续的?

除了标准定义它是连续的,为什么 std::vector 是连续的? 如果空间不足,则需要重新分配一个新块并将旧块复制到新块,然后再继续. 如果不是连续的怎么办?当存储填满时,它只会分配一个新块并保留旧块.当通过迭代器访问时,它会做简单的 >, ..
发布时间:2022-01-24 20:45:58 C/C++开发

将 std::vector 复制到 std::array

如何将 std::vector 的第一个 n 元素复制或移动到 C++11 std::array? 解决方案 使用std::copy_n std::arrayarr;std::copy_n(vec.begin(), N, arr.begin()); 编辑:我没有注意到您也询问过移动元素.要移动,请将源迭代器包装在 std::move_iterator 中.p> std ..
发布时间:2022-01-24 20:36:49 C/C++开发

C ++算法,如python的'groupby'

是否有任何类似于 itertools.groupby() 的 C++ 转换? 当然,我可以轻松编写自己的代码,但我更喜欢利用惯用行为,或者从 STL 或 boost 提供的功能中组合一个. #include #include #include #include #include 结构体{诠释 x;标准::字符串 y;浮动z;};bool ..
发布时间:2022-01-24 20:35:49 C/C++开发

固定动态大小的容器

是否有用于固定长度序列的标准容器,其中该长度在运行时确定.最好,我想将一个参数传递给每个序列元素的构造函数,并使用该参数来初始化一个 const 成员(或引用).我还想在 O(1) 中的给定索引处获取序列元素.在我看来,我的所有要求都无法同时满足. 我知道 std::array 有固定长度,但必须在编译时知道该长度. std::vector 具有动态大小,并允许使用 emplace 传递构 ..
发布时间:2022-01-24 20:35:13 C/C++开发

实现编译时“static-if";容器中不同字符串类型的逻辑

我想编写一个对字符串容器进行操作的函数模板,例如 std::vector. 我想用相同的模板函数同时支持 CString 和 std::wstring. 问题是 CString 和 wstring 有不同的接口,例如要获取 CString 的“长度",您调用 GetLength() 方法,而不是 wstring 你调用 size() 或 length(). 如果我们在 C++ 中 ..
发布时间:2022-01-24 20:34:14 C/C++开发

std::scoped_allocator_adaptor 的目的是什么?

在 C++11 标准中,我们在动态内存管理库中有 std::scoped_allocator_adaptor.这个类最重要的用例是什么? 解决方案 如果你想要一个字符串容器,并且想要对容器及其元素使用相同的分配器(因此它们都被分配在同一个区域中,如 TemplateRex描述)然后您可以手动执行此操作: template使用分配器 = SomeFancyAllocator;使用 S ..
发布时间:2022-01-24 20:32:42 C/C++开发

由于标准容器中元素的默认初始化导致性能下降

(是的,我知道有一个问题 几乎是同一个标题,但答案并不令人满意,见下文) 编辑对不起,原来的问题没有使用编译器优化.现在已修复此问题,但为了避免琐碎的优化并更接近我的实际用例,测试已分为两个编译单元. std::vector 的构造函数具有线性复杂性这一事实对于性能关键型应用程序来说是个麻烦事.考虑这个简单的代码 //编译单元1:void set_v0(type*x, size_ ..
发布时间:2022-01-24 20:26:01 C/C++开发