首页 文章
  • 174 votes
     answers
     views

    C排序和跟踪索引

    使用C,希望是标准库,我想按升序对一系列样本进行排序,但我还想记住新样本的原始索引 . 例如,我有一个集合,矢量或样本矩阵 A : [5, 2, 1, 4, 3] . 我想将它们排序为 B : [1,2,3,4,5] ,但我也想记住值的原始索引,所以我可以得到另一个集合: C : [2, 1, 4, 3, 0 ] - 它对应于'B'中每个元素的索引,在原始'A'中 . 例如,在Matlab中...
  • 398 votes
     answers
     views

    如何通过索引从std :: vector <>中删除元素?

    我有一个std :: vector &lt;int&gt;,我想删除第n个元素 . 我怎么做? std::vector&lt;int&gt; vec; vec.push_back(6); vec.push_back(-17); vec.push_back(12); vec.erase(???);
  • 1 votes
     answers
     views

    重载operator->用于STL迭代器

    我正在编写自己的C STL映射容器实现 . 现在我正在尝试实现迭代器 . 它应该允许你做类似iter-&gt; first和iter-&gt; second之类的事情,它们分别返回键/值,而iter是一个对象而不是一个指针 . 我想知道我应该如何重载这个?这有点令人困惑,因为我不确定返回类型应该是什么;我认为它必须是成员第一/第二的对象 . 是否通常返回对包装器/接口对象的引用或类似的东西?
  • 0 votes
     answers
     views

    如何将向量的第一个元素移动到另一个元素的末尾

    我有两个相同类型的向量,如下所示: std::vector&lt;Task*&gt; ToRun; std::vector&lt;Task*&gt; Completed; 完成 Task 后,需要将其自动从 ToRun 向量容器移动到 Completed 向量中 . ToRun Vector contains TaskOne TaskTwo TaskThree ... TaskN Compl...
  • 4 votes
     answers
     views

    STL迭代器作为返回值

    我有一个包含std :: vector的A类,我想从A类外部访问该向量 . 我想到的第一件事就是创建一个将迭代器返回给向量的get函数,但是遍历向量我将需要两个迭代器(开始和结束) . 我想知道是否有任何方法(技术或模式)只用一个迭代器迭代整个向量?或者可能有其他方式来访问vector,当然不使用vector作为返回值:)
  • 7 votes
     answers
     views

    如何使用公共const迭代器和私有非const迭代器提供类似于stl的容器?

    我有一个包含std :: list的类,并且希望为const_iterator提供public begin()和end(),为plain iterator提供private begin()和end() . 但是,编译器看到私有版本并抱怨它是私有的而不是使用公共const版本 . 我理解C不会在返回类型(在本例中为const_iterator和iterator)上重载,因此它选择非const版本,因...
  • 6 votes
     answers
     views

    采用STL样式迭代器的C虚方法

    我想要一个接口ModelGenerator,它有一个方法generate(),它接受一个可迭代的Evidence列表并创建一个Model . 使用STL伪鸭子类型迭代器成语... template&lt;class Model&gt; class ModelGenerator { public: template&lt;class Iterator&gt; virtual bo...
  • -2 votes
     answers
     views

    错误:没有匹配函数来调用'std :: map

    typedef struct { string strDatabaseName; set &lt;string, greater&lt;string&gt; &gt; setDBAccName; } UserDBAInfo_t; typedef struct { map&lt;int, UserDBAInfo_t &gt; mapUserDBAInfo; } UserDB...
  • 1 votes
     answers
     views

    unique_ptr列表,用于派生模板类

    我想创建一个 list&lt;unique_ptr&lt;Base&gt;&gt; listOfBaseUniquePtr . 这将能够给我两个:1.独特的ptrs,和2.多态性 . 我可以调用每个派生类的虚函数 . 有些东西对我不起作用 . 看看下面的代码示例: #include &lt;iostream&gt; #include &lt;list&gt; #include &lt;memor...
  • 59 votes
     answers
     views

    如何为 Map 创建自己的比较器?

    typedef map&lt;string, string&gt; myMap; 当将新对插入 myMap 时,它将使用键 string 通过其自己的字符串比较器进行比较 . 是否可以覆盖该比较器?例如,我想比较密钥 string 的长度,而不是字母表 . 或者还有其他方法来排序 Map 吗?
  • 3 votes
     answers
     views

    如何将可变参数args传递给std :: thread?

    我想通过从C 11包装std :: thread类来使用我自己的Thread实现,所以我将能够处理我想要的异常 . 这是我的包装类: #include &lt;Types.hpp&gt; #include &lt;thread&gt; #include &lt;exception&gt; #include &lt;functional&gt; class Thread { private...
  • 137 votes
     answers
     views

    如何获取原始数据的std :: vector指针?

    我正在尝试使用 std::vector 作为 char 数组 . 我的函数接受一个void指针: void process_data(const void *data); 在我刚刚使用此代码之前: char something[] = &quot;my data here&quot;; process_data(something); 哪个按预期工作 . 但是现在我需要 std::vector...
  • 2 votes
     answers
     views

    在单个链接列表上实现选择排序

    Heya我正在尝试在单链表上实现选择排序算法,我知道代码中存在一些问题但是虽然我的链表包含数字7 1 2 6,但运行后的输出是7777 . 任何帮助,将不胜感激 . template&lt;class Type&gt; void UnOrderedLinkedList&lt;Type&gt;::selectionSort() { nodeType&lt;Type&gt;* loc; nodeTyp...
  • 5 votes
     answers
     views

    将结构实例存储在std :: map中

    我正在尝试将一些结构映射到其他一些实例,如下所示: template &lt;typename T&gt; class Component { public: typedef std::map&lt;EntityID, T&gt; instances_map; instances_map instances; Component() {}; T add(En...
  • 3 votes
     answers
     views

    C stl map:与BSTR有关的问题

    我在我的代码中使用了一个映射 &lt;BSTR,struct&gt; bstr作为键并构造值 . 这项工作还是我必须重新定义一些东西? 我看到没有编译问题,我也可以添加元素 . 但是, map.find() 不起作用 . 即使该元素存在,它也始终返回 map.end() (未找到元素) . 我做了一个临时的解决方法如下 - 从 map.begin() 循环到 map.end() 并为每个元素执行...
  • 7 votes
     answers
     views

    std :: map和二进制搜索树

    我已经读过std map是使用二叉搜索树数据结构实现的 . BST是一种顺序数据结构(类似于数组中的元素),它将元素存储在BST节点中并按顺序维护元素 . 对于例如如果element小于node,则将其存储在节点的左侧,如果它大于node,则将其存储在node的右侧 . 通过这种方法,我们实现了搜索,插入等各种操作的O(log n)复杂度 . 但是,std map是一个关联容器 . 我们有一个键和...
  • 1 votes
     answers
     views

    std :: map :: find的效率是否与值的数据大小有关?

    我使用 std::map&lt;std::pair&lt;int, int&gt;, class B&gt; 来保存网格图的信息,B类包含大约10000字节的数据 . 我发现40000次 find 操作需要大约10ms,尽管 Map 只有四个键值 . 当我将B类数据大小减少到2500字节时,成本也降低到大约3.5ms . 我知道查找操作的时间复杂度是O(log(N)),这种现象的原因是什么?
  • 0 votes
     answers
     views

    使用 Map 存储已经读入的数据?

    各位大家好,感谢您抽出宝贵时间阅读本文 . 所以基本上我试图通过文本文件读取我读过的数据并将其存储到: std::map&lt;double,pair&lt;double,double&gt;&gt;storage 其中第一个双精度表示坐标的ID,而对表示x和y值,可以忽略z值 . ID X Y Z / n ID X Y Z. 类顶点 class vertex { public: ...
  • 0 votes
     answers
     views

    使用我的自定义迭代器和stl算法

    我正在尝试创建自己的迭代器,并且我已经使用std :: generate算法按预期工作了 . 但是,当我尝试std :: find的std :: max_element时,我得到了一些神秘的错误 . 这是我的迭代器的接口: template &lt;typename GridT, typename GridPtr, typename GridRef, ...
  • 3 votes
     answers
     views

    C STL type_traits问题

    我正在看最新的C9 lecture并注意到一些有趣的东西.. 在他对type_traits的介绍中,Stephan使用了以下内容(正如他所说,设计的)示例: template &lt;typename T&gt; void foo(T t, true_type) { std::cout &lt;&lt; t &lt;&lt; &quot; is integral&quot;; } temp...
  • 185 votes
     answers
     views

    如何从std :: map中检索所有键(或值)并将它们放入向量中?

    这是我出来的可能方式之一: struct RetrieveKey { template &lt;typename T&gt; typename T::first_type operator()(T keyValuePair) const { return keyValuePair.first; } }; map&lt;int, int&gt; m;...
  • 9 votes
     answers
     views

    大多数签名/未签名警告的可接受修复?

    我自己确信,在一个项目中,我正在研究有符号整数是大多数情况下的最佳选择,即使其中包含的值永远不会是负数 . (更简单的循环反转,更少的错误机会等,特别是对于只能保持0到20之间的值的整数,比如20 . ) 出错的大多数地方是std :: vector的简单迭代,过去常常是一个数组,之后变为std :: vector . 所以这些循环通常如下所示: for (int i = 0; i &lt; s...
  • 85 votes
     answers
     views

    从矢量中删除元素

    我想使用erase方法从向量中清除元素 . 但是这里的问题是元素不能保证在向量中只出现一次 . 它可能存在多次,我需要清除所有这些 . 我的代码是这样的: void erase(std::vector&lt;int&gt;&amp; myNumbers_in, int number_in) { std::vector&lt;int&gt;::iterator iter = myNumber...
  • 208 votes
     answers
     views

    C按值而不是按位置擦除矢量元素? [重复]

    这个问题在这里已有答案: How do I remove an item from a stl vector with a certain value? 9个答案 vector&lt;int&gt; myVector; 并且让我们说向量中的值是这个(按此顺序): 5 9 2 8 0 7 如果我想删除包含值“8”的元素,我想我会这样做: myVector.erase(myVector.beg...
  • -1 votes
     answers
     views

    std :: unordered_map ::使用key查找和计数参数无法编译

    在为项目编译代码时,我遇到了一些神秘的错误 . 我正在使用 std::unordered_map 在游戏中存储世界各地,因此多人可以在同一区域玩游戏而不会混淆服务器 . 在world_manager.hpp中,我有一个键结构: `` struct chunk_key { int32_t cX, cZ; uint8_t dimension; }; ...
  • 49 votes
     answers
     views

    使用C vector :: insert()添加到向量的末尾

    我必须根据向量元素中的值将值插入某个地方的C STL向量中 . 我正在使用 insert() 函数来完成此任务 . 我意识到,当我想在向量的末尾添加一个新元素时,我可以简单地使用 push_back() . 但为了保持我的代码看起来不错,我想专门使用 insert() ,它将指向所需插入点之后的元素的迭代器和要插入的值作为输入 . 如果作为参数传入的迭代器的值是 v.end() ,其中 v 是我...
  • 133 votes
     answers
     views

    迭代通过std :: map的顺序是否已知(并由标准保证)?

    我的意思是 - 我们知道 std::map 's elements are sorted according to the keys. So, let'表示键是整数 . 如果我使用 for 从 std::map::begin() 迭代到 std::map::end() ,标准是否保证我将通过带有键的元素进行迭代,按升序排序? 例: std::map&lt;int, int&gt; map_; ...
  • 3 votes
     answers
     views

    如何获取向量的那些元素,其中另一个向量在相应的索引处具有'1' s

    我有两个向量 std::vector&lt;int&gt; markedToBeRead(7); // contains: 1,1,0,0,1,0,1 std::vector&lt;float&gt; myVec(7); // contains: 1,2,3,4,5,6,7 从myVec中获取这些元素的最佳方法是什么,其中 markedToBeRead 的相应索引具...
  • 189 votes
     answers
     views

    为什么标准迭代器范围[开始,结束]而不是[开始,结束]?

    为什么标准将 end() 定义为结尾的一个,而不是实际结束?
  • 17 votes
     answers
     views

    C 11:非成员rbegin()/ rend()函数

    由于在C 11修订版中为标准包含添加了非成员 begin() 和 end() 函数,为什么还没有添加 rbegin() 和 rend() 函数的非成员版本?在开始使用 begin() 和 end() 的非成员版本后,我觉得很傻,但却发现我现在必须在使用成员函数和非成员函数调用之间切换 . (我意识到滚动我自己的 rbegin() 和 rend() 的非成员版本是微不足道的,但我添加了标准的'm ...

热门问题