c++11相关内容
SGI slist 和 C++11 std::forward_list 对我来说都是一样的,除非我错过了什么;两者都实现了单链表. 我认为这是有区别的,因为 C++ 标准委员会在将容器添加到 C++0x 标准库时并没有采用名称 slist,而是选择了一个新名称 forward_list. 解决方案 一个主要区别是 std::forward_list 缺少一个 size() 成员函数,
..
新的 C++11 标准需要 STL 实现来支持容器中的有状态分配器.现在主要的 STL 实现(Visual Studio 2008、2010、libstdc++)是否符合这个要求?我在 MSDN 或 libstdc++ 文档中一无所获. 解决方案 看起来 STL 容器中的状态分配器功能已经得到广泛支持.在大多数情况下,分配器的状态性不会造成麻烦.尚未得到广泛支持的是新标准处理问题情况的方式
..
我发现自己一直在编写 Mutex 代码,以便同步对 std::unordered_map 和其他容器的读/写访问,以便我可以像使用 java.util.concurrent 容器一样使用它们.我正要开始编写一个包装器来封装 Mutex,但我宁愿使用一个经过良好测试的库,这样我就不会塞满线程. 有这样的图书馆吗? 解决方案 Intel 制作了一个名为 Threading Buildin
..
在 C++11 中,当我们想要将值移动(破坏性复制)到容器中时,我们可以使用 std::move 来提高效率: SomeExpensiveType x =/* ... */;vec.push_back(std::move(x)); 但我找不到任何相反的方向.我的意思是这样的: SomeExpensiveType x = vec.back();//复制!vec.pop_back();//啊
..
8 年前,Stephen Lavavej 发表了这篇博文,其中包含简单的分配器实现,命名为“Mallocator".从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关? 解决方案 STL 自己在他的 STL 中有这个问题的答案特性和实现技术在 CppCon 2014 上的演讲(开始于 26'30).
..
..
我想从 并行 运行线程访问基于 STL 的容器只读.不使用任何用户实现的锁定.以下代码的基础是 C++11,并正确实现了该标准. http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_concurrency.html http://www.sgi.com/tech/stl/thread_safety.html http://www.hp
..
可能重复: 我可以列出初始化一个只移动类型的向量吗? 我使用 gcc 4.6.1 编译这段代码 int main(){std::vector>向量({std::unique_ptr(new int(0)),std::unique_ptr(new int(1)),});返回0;} 在 g++ 的抱怨中,有类似的东西 /usr/lib/gcc/x86_64-unknown-linux-g
..
我需要实现一个容器来容纳大量元素,并且由于某种原因,它必须在没有任何堆分配的情况下工作.另一个要求是,不应以任何方式复制或移动容器元素.它们必须直接构造到容器分配的内存中. 为此,我决定使用 Placement new 并将内存管理完全委托给容器实现(在 drdobbs). 此处提供了一个运行示例.(请注意,使用 new uint8_t[size] 和 std::queue 只是为了保
..
独立的 STL 算法(如 std::count_if)采用一对迭代器.在我使用这些的所有情况下(以及我在网上看到的所有示例!),我发现自己在输入 std::count_if(myContainer.begin(),myContainer.end(),/* ... */); 样式的速记模板有什么原因吗 std::count_if(myContainer,/* ... */); 没有提供,因为
..
除了标准定义它是连续的,为什么 std::vector 是连续的? 如果空间不足,则需要重新分配一个新块并将旧块复制到新块,然后再继续. 如果不是连续的怎么办?当存储填满时,它只会分配一个新块并保留旧块.当通过迭代器访问时,它会做简单的 >,
..
根据这个问题,我想使用一个 unitialised_allocator ,例如 std::vector 以避免在构造时默认初始化元素(或 std 的 resize()::vector(另见 这里是一个用例).我目前的设计是这样的: //基于 Jared Hoberock 的设计模板struct uninitialised_allocator : base_allocator::template
..
如何将 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
..
是否有任何类似于 itertools.groupby() 的 C++ 转换? 当然,我可以轻松编写自己的代码,但我更喜欢利用惯用行为,或者从 STL 或 boost 提供的功能中组合一个. #include #include #include #include #include 结构体{诠释 x;标准::字符串 y;浮动z;};bool
..
是否有用于固定长度序列的标准容器,其中该长度在运行时确定.最好,我想将一个参数传递给每个序列元素的构造函数,并使用该参数来初始化一个 const 成员(或引用).我还想在 O(1) 中的给定索引处获取序列元素.在我看来,我的所有要求都无法同时满足. 我知道 std::array 有固定长度,但必须在编译时知道该长度. std::vector 具有动态大小,并允许使用 emplace 传递构
..
我想编写一个对字符串容器进行操作的函数模板,例如 std::vector. 我想用相同的模板函数同时支持 CString 和 std::wstring. 问题是 CString 和 wstring 有不同的接口,例如要获取 CString 的“长度",您调用 GetLength() 方法,而不是 wstring 你调用 size() 或 length(). 如果我们在 C++ 中
..
在 C++11 标准中,我们在动态内存管理库中有 std::scoped_allocator_adaptor.这个类最重要的用例是什么? 解决方案 如果你想要一个字符串容器,并且想要对容器及其元素使用相同的分配器(因此它们都被分配在同一个区域中,如 TemplateRex描述)然后您可以手动执行此操作: template使用分配器 = SomeFancyAllocator;使用 S
..
我遇到了一个错误:在编译类似于下面的代码时调用'std::__1::unique_ptr >'的隐式删除的复制构造函数c++ -std=c++14 unique_ptr_vector.cpp -o main 这是一个简化版: 头文件'my_header.h': #include #include #include #include A类{
..
(是的,我知道有一个问题 几乎是同一个标题,但答案并不令人满意,见下文) 编辑对不起,原来的问题没有使用编译器优化.现在已修复此问题,但为了避免琐碎的优化并更接近我的实际用例,测试已分为两个编译单元. std::vector 的构造函数具有线性复杂性这一事实对于性能关键型应用程序来说是个麻烦事.考虑这个简单的代码 //编译单元1:void set_v0(type*x, size_
..
..