Tag: stl

为什么C ++ STL不提供任何“树”容器?

为什么C ++ STL不提供任何“树”容器,而最好使用什么呢? 我想将对象的层次结构存储为树,而不是将树用作性能增强…

hash_map是STL的一部分吗?

快速的问题…散列图是STL的一部分吗?

为地图创build一个自己的比较器

typedef map<string, string> myMap; 当向myMap插入一个新对时,它将使用该键通过自己的string比较器进行比较。 我不知道我们是否可以重写那个比较器呢? 例如比较键的长度,而不是字母表。 或者无论如何要重新sorting地图。 感谢您的帮助。

std :: vector与std :: list与std :: slist的相对性能?

对于一个简单的链表来说,对列表元素的随机访问是不需要的,使用std::list而不是std::vector有什么显着的优点(性能或其他) 如果需要向后遍历,在迭代元素之前使用std::slist和reverse()会更有效率吗?

用vector :: iterator或at()迭代STLvector的速度会更快吗?

在性能方面,什么工作会更快? 有区别吗? 它是依赖于平台吗? //1. Using vector<string>::iterator: vector<string> vs = GetVector(); for(vector<string>::iterator it = vs.begin(); it != vs.end(); ++it) { *it = "Am I faster?"; } //2. Using size_t index: for(size_t i = 0; i < vs.size(); ++i) { //One option: vs.at(i) = "Am I faster?"; //Another option: vs[i] = "Am I faster?"; }

将地图值复制到STL中的vector

目前正在通过有效的STL工作。 第5项build议通常最好将范围成员函数用于其单个元素对应项。 我现在希望将所有的值都映射到一个向量中(也就是我不需要这个键)。 最干净的方法是什么?

是list :: size()真的是O(n)?

最近,我注意到有人提到std::list::size()具有线性复杂性。 根据一些 消息来源 ,这实际上是依赖于实现的,因为标准并没有说明复杂性是什么。 在这个博客条目中的评论说: 其实,这取决于你正在使用的STL。 Microsoft Visual Studio V6实现size()为{return(_Size); }而gcc(至less在版本3.3.2和4.1.0)做{return std :: distance(begin(),end()); }第一个是恒定速度,第二个是o(N)速度 所以我的猜测是,对于VC ++人群size() ,Dinkumware自从VC6以来可能不会改变这个事实。 我在吗? 它在gcc看起来像什么? 如果真的是O(n),为什么开发者select这样做呢?

清理指针的STL列表/向量

什么是C ++的最短的块,你可以想出安全地清理向量或指针列表? (假设你必须调用指针删除?) list<Foo*> foo_list; 我宁愿不使用Boost或用智能指针来包装我的指针。

如何从C风格的数组初始化std :: vector?

什么是最便宜的方式来初始化一个C风格的数组的std::vector ? 例子:在下面的类中,我有一个vector ,但由于外部的限制,数据将作为C风格的数组传递: class Foo { std::vector<double> w_; public: void set_data(double* w, int len){ // how to cheaply initialize the std::vector? } 显然,我可以调用w_.resize() ,然后遍历元素,或者调用std::copy() 。 有没有更好的方法?

C ++双地址运算符? (&&)

我正在阅读STL源代码,我不知道什么&&地址运营商应该做的。 这是一个来自stl_vector.h的代码示例: vector& operator=(vector&& __x) // <– Note double ampersands here { // NB: DR 675. this->clear(); this->swap(__x); return *this; } “地址地址”是否有意义? 为什么它有两个地址运算符而不是一个?