Questions tagged «stl»

标准模板库(STL)是包含通用容器,迭代器,算法和函数对象的C ++库。当C ++标准化时,STL的大部分被标准库所采用,并且标准库中的这些部分有时也被错误地统称为“ STL”。

8
vector :: at与vector :: operator []
我知道这at()比[]它的边界检查要慢,因为边界检查也有类似的问题,例如C ++ Vector at / []运算符速度 或:: std :: vector :: at()vs :: [] <<令人惊讶的结果!慢/快5到10倍!。我只是不明白该at()方法有什么用。 如果我有一个像这样的简单向量:std::vector<int> v(10);并且我决定通过使用at()而不是[]在有索引的情况下使用in 来访问其元素,i并且不确定其是否在向量范围内,它将迫使我用try-catch包装它块: try { v.at(i) = 2; } catch (std::out_of_range& oor) { ... } 尽管我可以自己使用size()和检查索引来获得相同的行为,但对我来说似乎更容易也很方便: if (i < v.size()) v[i] = 2; 所以我的问题是:与vector :: operator [] 相比,使用vector :: at有什么优点? 什么时候应该使用vector :: at而不是vector :: size …
95 c++  stl  stdvector 

2
std :: back_inserter的std :: set吗?
我想这是一个简单的问题。我需要做这样的事情: std::set<int> s1, s2; s1 = getAnExcitingSet(); std::transform(s1.begin(), s1.end(), std::back_inserter(s2), ExcitingUnaryFunctor()); 当然,std::back_inserter因为没有,所以不起作用push_back。 std::inserter还需要一个迭代器?我没有用过,std::inserter所以不确定该怎么做。 有人有主意吗? 当然,我的另一个选择是对使用向量s2,然后稍后对其进行排序。也许更好?
94 c++  algorithm  stl 




7
使用gdb检查标准容器(std :: map)内容
假设有这样的事情: #include <map> int main(){ std::map<int,int> m; m[1] = 2; m[2] = 4; return 0; } 我希望能够检查从gdb运行该程序的地图的内容。 如果尝试使用下标运算符,则会得到: (gdb) p m[1] Attempt to take address of value not located in memory. 使用find方法不会产生更好的结果: (gdb) p m.find(1) Cannot evaluate function -- may be inlined 有没有办法做到这一点?
93 c++  stl  map  gdb 

4
给定位置,如何获取列表中的某个元素?
所以我有一个清单: list<Object> myList; myList.push_back(Object myObject); 我不确定,但是我有信心这将是数组中的“第0个”元素。我可以使用任何可以返回“ myObject”的函数吗? Object copy = myList.find_element(0); ?
92 c++  list  stl 

2
如何将list <T>对象附加到另一个对象
在C ++中,我有两个list&lt;T&gt;对象A,B并且想要将的所有成员添加B到的末尾A。我搜索了一些不同的资源,但没有找到一个简单的解决方案(ei A.append(B);),这让我有些惊讶。 做这个的最好方式是什么? 碰巧的是,在此之后我不在乎B(它会在下一行删除),因此,如果有一种方法可以利用它来获得更好的性能,我也对此感兴趣。
92 c++  list  stl 

2
为什么默认情况下std :: stack使用std :: deque?
由于要在堆栈中使用容器的唯一操作是: 背部() 推回() pop_back() 为什么默认容器是双端队列而不是向量? 难道双端队列重分配不会在front()之前提供元素的缓冲区,以便push_front()是有效的操作?这些元素不会浪费,因为它们永远不会在堆栈的上下文中使用吗? 如果没有用这种方式使用双端队列代替向量的开销,为什么priority_queue的默认向量也不是双端队列?(priority_queue需要front(),push_back()和pop_back()-与堆栈基本相同) 根据以下答案进行了更新: 似乎双端队列通常实现的方式是固定大小数组的可变大小数组。这使得它的增长速度比矢量(需要重新分配和复制)的增长速度快,因此对于像堆栈这样的所有元素而言,添加和删除元素都是可行的,双端队列可能是一个更好的选择。 priority_queue需要大量索引,因为每次删除和插入都需要运行pop_heap()或push_heap()。因为添加元素无论如何仍会摊销常量,所以这可能使vector成为更好的选择。
91 c++  stl  containers 


9
std :: map插入还是std :: map查找?
假设要在其中保留现有条目的地图。20%的时间,您要插入的条目是新数据。使用返回的迭代器执行std :: map :: find然后进行std :: map :: insert有好处吗?还是尝试插入然后根据迭代器是否指示记录已插入而采取行动来更快?
90 c++  optimization  stl  stdmap 

8
vector <bool>的替代方法
正如我们所希望的那样,它vector&lt;bool&gt;已经完全损坏了,不能被视为C数组。获得此功能的最佳方法是什么?到目前为止,我想到的想法是: 使用一个vector&lt;char&gt;代替,或 使用包装器类并具有 vector&lt;bool_wrapper&gt; 你们如何处理这个问题?我需要c_array()功能。 附带的问题是,如果我不需要该c_array()方法,如果我需要随机访问,解决该问题的最佳方法是什么?我应该使用双端队列还是其他方法? 编辑: 我确实需要动态调整大小。 对于那些不知道的人,vector&lt;bool&gt;是专门的,因此每个人bool需要1位。因此,您不能将其转换为C样式的数组。 我猜“包装器”有点用词不当。我在想这样的事情: 当然,my_bool由于可能的对齐问题,我不得不读一读:( struct my_bool { bool the_bool; }; vector&lt;my_bool&gt; haha_i_tricked_you;
90 c++  stl  vector  boolean 

6
C ++中向量的初始容量
什么是capacity()的std::vector这是使用默认constuctor产生的?我知道那size()是零。我们可以声明默认构造的向量不调用堆内存分配吗? 这样,就有可能使用单个分配来创建具有任意保留的数组std::vector&lt;int&gt; iv; iv.reserve(2345);。假设由于某种原因,我不想size()在2345上启动。 例如,在Linux(g ++ 4.4.5,内核2.6.32 amd64)上 #include &lt;iostream&gt; #include &lt;vector&gt; int main() { using namespace std; cout &lt;&lt; vector&lt;int&gt;().capacity() &lt;&lt; "," &lt;&lt; vector&lt;int&gt;(10).capacity() &lt;&lt; endl; return 0; } 印刷0,10。这是规则,还是STL供应商相关?

6
使用find方法后如何更新std :: map?
std::map使用该find方法后如何更新键值? 我有一个这样的映射和迭代器声明: map &lt;char, int&gt; m1; map &lt;char, int&gt;::iterator m1_it; typedef pair &lt;char, int&gt; count_pair; 我正在使用地图存储字符出现的次数。 我正在使用Visual C ++ 2010。
90 c++  map  stl  stdmap 

8
我应该使用哪个STL容器作为FIFO?
哪个STL容器最适合我的需求?我基本上有一个10个元素宽的容器,在其中我会不断添加push_back新元素,同时pop_front选择最旧的元素(大约一百万次)。 我目前正在使用a std::deque来执行任务,但想知道a std::list是否会更高效,因为我不需要重新分配自身(或者我误以为a std::deque了std::vector)。还是有一个我需要的效率更高的容器? PS我不需要随机访问
89 c++  stl  fifo 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.