stl相关内容
将数据从一个范围复制到另一个范围时,您必须小心源范围和目标范围之间是否存在部分重叠.如果目标范围的开头与源范围的尾部重叠,则纯顺序副本将使数据出现乱码.C 运行时库除了 memcpy 之外还有 memmove 来处理此类重叠问题. 我假设 std::copy 像 memcpy 一样工作,因为它不考虑源区域和目标区域之间的重叠.如果您尝试使用 std::copy 在 std::vector 中
..
在我的代码中,我有一个 std::unordered_set,我需要将数据移动到 std::vector 中.我在获取数据时使用 std::unordered_set 以确保在转换为 std::vector 之前只存储唯一值.我的问题是如何最有效地将内容移动到 std::vector ?移动数据后我不需要 std::unordered_set .我目前有以下: std::copy(set.beg
..
是否可以在不复制的情况下从函数返回标准容器? 示例代码: std::vector我的函数();...std::vectorb = MyFunc(); 据我了解,这会将返回值复制到一个新向量 b 中.使函数返回引用或类似的东西可以避免复制吗? 解决方案 如果您的编译器支持 NRVO,那么只要返回对象的函数满足某些条件,就不会进行复制.值得庆幸的是,这最终被添加到 Visual
..
我想做以下事情: 在字符串和任何类型的对象(可以是列表、整数 - 任何东西)之间定义映射. 地图的键可以如下(同样,这些值并不重要): “AAA/123"==> 1 “AAA/"==> 2 “BBB/" ==> 3 "CCC/*" ==> 4 “CCC/123"==> 5 现在,诀窍是我想在给定以下字符串的情况下找到正确的值: “AAA/123"应该给 1. “AAA/111"
..
与容器的 find 方法相比,使用 C++11 的 std::find 有什么优势吗? 在 std::vector (没有 find 方法)的情况下 std::find 使用是一些智能算法还是简单地迭代每个元素的简单方法? 在 std::map 的情况下,您似乎需要传递一个 std::pair,即 value_typestd::map 的代码>.这似乎不是很有用,因为您通常希望找到键或
..
使用 STL,我想在一个序列中找到某个值的最后一个实例. 此示例将在整数向量中找到 0 的 第一个实例. #include #include #include typedef std::vector内推;intvec 价值观;//... 整数被添加到值中intvec::const_iterator split = std::find(values.beg
..
..
场景 我在使用 STL 时遇到了减速带,这似乎是一种正常的场景,在这里简化一下: 类人{字符串名称;诠释年龄;};矢量人们;添加人(人);字符串 s(“鲍勃");查找(people.begin(),people.end(),s); 问题 不幸的是find想比较整个类. 问题 有没有更好或更合适的方式来做到这一点“STL 方式"?建议的问题没有帮助,但我设法找到了几
..
我正在使用用户定义的位数(我持有一个 3 维位数组,因此大小按立方增加 - 假设不少于 512 位),并且需要分别翻转它们.现在,只是在计算机上,我使用 bool 类型,因为内存不是问题.我确实计划将来将代码移至微控制器,因此处理能力和内存要求可能是一个问题.不过现在,我只想要速度. 然后我从 C++ STLstd::bitset 对象a>,但我无法在运行时定义位集的大小.然后我发现 std
..
(希望)我们都知道,vector 已完全损坏,不能被视为 C 数组.获得此功能的最佳方法是什么?到目前为止,我想到的想法是: 使用 vector 代替,或 使用包装类并具有 vector 你们如何处理这个问题?我需要 c_array() 功能. 作为一个附带问题,如果我不需要 c_array() 方法,如果我需要随机访问,解决此问题的最佳方法是什么?我应该使用双端队
..
像这样 问题 已经问过了,我想使用 STL 初始化一个容器,其中元素以最干净的方式进行硬编码.在这种情况下,元素是一个双重嵌套的容器: set>一个; 我想(例如)将以下值放入: A = [[0,0,1],[0,1,0],[1,0,0],[0,0,0]]; C++0x 很好,使用 g++ 4.4.1.STL 更可取,因为我不将 Boost 用于代码的任何其他部分(尽管我不介意使用它的示例!
..
我有兴趣构建一个 uninitialized_vector 容器,它在语义上与 std::vector 相同,但需要注意的是,否则将使用将在没有初始化的情况下创建无参数构造函数.我主要对避免将 POD 初始化为 0 感兴趣.据我所知,没有办法通过将 std::vector 与特殊类型的分配器结合来实现这一点. 我想以与 std::stack 相同的方式构建我的容器,它适应用户提供的容器(在我
..
我想使用一种特殊的方法来初始化一个 std::vector 在我用作参考的 C++ 书籍中描述(德国书籍 'Der C++ Programmer'Ulrich Breymann,以防万一).在那本书中有一节介绍了 STL 的序列类型,特别提到了 list、vector 和 deque.在本节中,他写道,这种序列类型有两个特殊的构造函数,即,如果 X 引用了这种类型,
..
可能重复: c++ 为什么 std::vector 的 initializer_list 行为和std::array 不同 我定义了简单的二维数组(3X2): std::array,2>一个 {{1,2,3},{4,5,6}}; 我很惊讶这个初始化不起作用,出现 gcc4.5 错误:too many initializers for 'std::array
..
我可以创建一个数组并像这样初始化它: int a[] = {10, 20, 30}; 如何创建 std::vector 并以同样优雅的方式初始化它? 我知道的最好方法是: std::vector整数;ints.push_back(10);ints.push_back(20);ints.push_back(30); 有没有更好的办法? 解决方案 一种方法是使用数组来初始化向量
..
我可以理解multiset有count(),用于计算一个值出现的次数,因为元素可以在multiset中重复.但是当所有的值都已经是唯一的时候,设置 count() 有什么意义呢? 解决方案 count 是 关联容器要求(1). 每个关联容器都需要将其作为其接口的一部分提供,即使结果始终为 0 或 1,就像 std::set 的情况一样. (1) 这是描述关联容器概念的 SGI
..
set小号;s.插入(1);s.插入(2);...s.插入(n); 我想知道 s.find(k) 需要多少时间,其中 k 是 1..n 中的数字?我假设它是 log(n).这是正确的吗? 解决方案 O( log N ) 来搜索单个元素. §23.1.2 表 69 表达式返回注释复杂度a.find(k) 迭代器;返回一个指向对数的迭代器具有等效于 k 的键的 const_itera
..
C++ 标准库是否有“有序集"数据结构?所谓有序集,我的意思是与普通的 std::set 完全相同,但它会记住您将项目添加到其中的顺序. 如果不是,模拟一个的最佳方法是什么?我知道你可以做一些事情,比如有一组对,每对存储它添加的数字和实际值,但如果有更简单的解决方案,我不想跳过箍. 解决方案 没有一个单一的、同质的数据结构会具有这个属性,因为它要么是顺序的(即元素按插入顺序排列)要么
..
我正在尝试将对象 Point2D 插入到 Point2D 集中,但我无法做到,似乎该集适用于 int 和 char 但不适用于对象. 我需要帮助才能知道如何将对象插入集合中???假设我想按 x 值的升序对它们进行排序 类 Point2D{上市:Point2D(int,int);int getX();int getY();无效 setX(int);无效 setY(int);双 getScal
..
如何按插入顺序将元素存储在集合中.例如. setmyset;myset.insert("堆栈");myset.insert("溢出"); 如果你打印,输出是 溢出堆 需要的输出: 堆栈溢出 解决方案 一种方法是使用两个容器,一个 std::deque 按插入顺序存储元素,另一个 std::set 以确保没有重复. 插入元素时,先检查是否在set中,如果是则丢弃;如果不存在,请将
..