stl相关内容

STL Containers 分配放置新

我找不到这个问题的确切答案,因此在这里发布.当我想到向量时,它需要在连续的内存位置构建对象.这意味着向量保持分配的内存,并且必须对被推入其中的对象进行就地构造(=放置新).这是一个有效的假设吗?另外,这是否意味着容器正在手动调用析构函数而不是调用删除?我在这里缺少任何其他假设吗?这是否意味着我可以假设如果我选择编写,即使是为对象编写的自定义 new 也可能不会被调用? 此外,列表使用 new ..
发布时间:2022-01-24 20:52:14 C/C++开发

set_union 与多集容器?

当一个或两个输入容器是具有重复对象的多重集时,算法 std:set_union 的返回是什么?复制人会迷路吗? 假设例如: multisetms1;ms1.插入(1);ms1.插入(1);ms1.插入(1);ms1.插入(2);ms1.插入(3);多集ms2;ms2.插入(1);ms2.插入(1);ms2.插入(2);ms2.插入(2);ms2.插入(4);向量诉(10 ..
发布时间:2022-01-24 20:51:36 C/C++开发

对容器中所有元素的成员函数结果求和的最佳方法是什么?

假设我有以下对象: struct Foo{int size() { 返回 2;}}; 获取 vector 中所有对象的总 size 的最佳方法是什么(最易于维护、可读等)?我会发布我的解决方案,但我对更好的想法感兴趣. 更新: 到目前为止,我们有: std::accumulate 和仿函数 std::accumulate 和 lambda 表达式 普通的 for ..
发布时间:2022-01-24 20:50:37 C/C++开发

C++20 constexpr 容器将如何工作?

作为 constexpr std::字符串和constexpr std::vector 已被 C++20 接受,这些将如何使用?链接的论文在细节上非常短.我们是否需要指定特殊的 constexpr 分配器,使编译时字符串/向量与其正常等效项不兼容? 解决方案 这两篇论文严重依赖P0784,其中讨论了编译时分配的工作方式. 不完整的答案: 只有 std::allocator 可以 ..
发布时间:2022-01-24 20:49:29 C/C++开发

STL 容器函数返回值

查看 STL 容器的成员函数时,我想到了一个奇怪的想法.为什么像 std::vector::push_back(T) 这样的函数没有(可选的)返回值(迭代器甚至对附加对象的引用)?我知道像 insert 和 erase 这样的 std::string 函数会返回迭代器,但这是出于显而易见的原因.我认为它通常会在这些函数调用之后保存第二行代码. 我相信C++的设计者有一个很好的理由,请赐 ..
发布时间:2022-01-24 20:49:10 C/C++开发

“可复制构造"C++ stl 容器元素的要求

关于C++ stl容器元素的要求,标准规定:元素类型应为CopyConstructible,并有CopyConstructible要求表.同样通过各种书籍(Josuttis 等),生成的副本应该与源“等效". 我想我需要澄清一下.究竟什么是“等同于"?我也对“CopyConstructible"和“深/浅拷贝"之间的关系有点困惑.一般来说,拷贝构造函数要么是浅拷贝,要么是深拷贝.那么哪个适用 ..
发布时间:2022-01-24 20:48:49 C/C++开发

更改给定 STL 容器的 value_type

假设,我有一个 STL 容器 type(不是对象),比如 vector.现在它的 value_type 是 A,所以我想把它改成 B. 基本上,我想要一个这种形式的类模板,或者它的变体: template结构 change_value_type{typedef/*....*/new_container;}; 以便我可以通过以下方式使用它: typename change_value_t ..
发布时间:2022-01-24 20:47:47 C/C++开发

如何制作一个 C++ 映射容器,其中键是值的一部分?

我想存储一堆键值对象,但是值对象本身(以及对它的引用)知道它的键.我还想有效地查找仅给定键的这些对象. 类 SomeObject{私人的://字符串或整数.int 似乎足够便宜,可以用 std::map 复制,但是//当可能存在数千个对象时,字符串似乎相当昂贵.//引用/指向键的指针很好const SomeOtherObject 键;...其他的东西...上市:...方法,其中一些以某种方式使用 ..
发布时间:2022-01-24 20:46:31 C/C++开发

stl容器如何被删除?

stl中的vector之类的容器对象如何被销毁,即使它们是在堆中创建的? 编辑 如果容器持有指针,那么如何销毁这些指针对象 解决方案 指针的 STL 容器不会清理指向的数据.它只会清理保存指针的空间.如果你想让向量清理指针数据,你需要使用某种智能指针实现: {std::vectorv1;v1.push_back(new SomeClass());std ..
发布时间:2022-01-24 20:42:51 C/C++开发

stl C++ 和 C# 容器之间的映射

有人能指出常用的 C++ STL 容器(如 vector、list、map、set、multimap...)和 C# 通用容器之间的良好映射吗? 我已经习惯了前者,并且不知何故我已经习惯于用这些容器来表达算法.我很难找到与这些等效的 C#. 谢谢! 解决方案 这是一个粗略的等价: 字典 unordered_map HashSet ..
发布时间:2022-01-24 20:42:35 C#/.NET

检查stl容器中元素的类型 - C++

如何获取 STL 容器所包含的元素的类型? 解决方案 对于一般容器,它将是 X::value_type.对于关联容器,它将是 X::mapped_type(X::value_type 对应于 pair).符合 C++ 标准第 23 章. 要检查类型是否相等,您可以使用 boost::is_same.从 C++11 开始 — std::is_same. ..
发布时间:2022-01-24 20:38:04 C/C++开发

如何在 STL 容器中移动元素

我想将容器内的元素向左或向右移动.移位元素不连续. 例如,我有一个向量 {1,2,3,4,5,6,7,8},我想将 {4,5,7} 向左移动 2 个位置,预期结果将是 {1,4,5,2,7,3,6,8} 有没有优雅的方法来解决它? 解决方案 你可以自己写移位函数.这是一个简单的: #include #include 模板 ..
发布时间:2022-01-24 20:37:39 C/C++开发

typedef 和 const 指针的容器

以下代码行编译得很好并且表现良好: listint_pointers;//(1) 以下两行没有: typedef int * IntPtr;列表int_pointers;//(2) 我得到完全相同的编译错误 listint_pointers;//(3) 我很清楚最后一行是不合法的,因为 STL 容器的元素需要是可分配的.为什么编译器 ..
发布时间:2022-01-24 20:37:17 C/C++开发

适用于 STL 容器的简单 C++ 模板

我需要一个这样的模板,效果很好 模板void mySuperTempalte(常量容器 myCont){//在这里做点什么} 然后我想将上面的模板专门用于 std::string 所以我想出了 模板void mySuperTempalte (const 容器 myCont){//检查容器类型//在这里做点什么} 这不起作用,并引发错误.我想让第二个示例工作,然后如 ..
发布时间:2022-01-24 20:35:55 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++开发

STL 堆栈和 priority_queue 的插入器

std::vector、std::list 和 std::deque 有 std::back_inserter,并且 std::set 有 std::inserter. 对于 std::stack 和 std::priority_queue 我会假设等效的插入器是 push() 但我可以似乎找不到要调用的正确函数. 我的意图是能够将以下函数与正确的插入迭代器一起使用: #includ ..
发布时间:2022-01-24 20:30:06 C/C++开发