Tag: stl

为什么有那么多的std :: swap的特化?

在查看std::swap的文档时,我看到了很多专业化的东西。 它看起来像每个STL容器,以及许多其他标准设施有一个专门的交换。 我想借助模板,我们不需要所有这些专业化? 例如, 如果我写我自己的pair它与模板版本正常工作: template<class T1,class T2> struct my_pair{ T1 t1; T2 t2; }; int main() { my_pair<int,char> x{1,'a'}; my_pair<int,char> y{2,'b'}; std::swap(x,y); } 那么从专门的std::pair获得什么呢? template< class T1, class T2 > void swap( pair<T1,T2>& lhs, pair<T1,T2>& rhs ); 我还想知道是否应该为自定义类写作自己的专业化, 或者仅仅依靠模板版本。

在一个集合中合并多个集合元素

我想知道是否有任何标准库或增强工具,以轻松合并多个集合的内容到一个单一的。 在我的情况下,我有一些我想要合并的整数。

C ++中有效的链表

这个文件说std::list是低效率的: std :: list是一个非常低效的类,很less有用。 它为插入到其中的每个元素执行堆分配,因此具有非常高的常数因子,特别是对于小数据types。 评论:这是令我惊讶的。 std::list是一个双向链表,所以尽pipe在元素构造方面效率低下,它支持O(1)时间复杂度的插入/删除,但是在这个引用的段落中完全忽略了这个特性。 我的问题:假设我需要一个用于小尺寸齐次元素的顺序容器,并且这个容器应该支持O(1)复杂的元素插入/删除,并且不需要随机访问(虽然支持随机访问是好事,但这不是必须的这里)。 至less在元素个数很less的时候,我也不希望堆分配给每个元素的构造带来高的恒定因子。 最后,只有当相应的元素被删除时, 迭代器才会失效。 显然,我需要一个自定义容器类,它可能(或可能不)是双向链表的变体。 我应该如何devise这个容器? 如果上述规范不能实现,那么也许我应该有一个自定义的内存分配器,比如说,指针分配器? 我知道std::list将分配器作为其第二个模板参数。 编辑:我知道我不应该太关心这个问题,从工程的angular度来看 – 足够快就足够了。 这只是一个假设的问题,所以我没有更详细的用例。 随意放松一些要求! Edit2:我知道O (1)复杂性的两种algorithm由于其常数因素的不同而可能具有完全不同的性能。

为什么在C ++ 11中改变了std :: vector :: resize签名?

std::vector::resize从pre-C ++ 11中改变的原因是什么? void resize( size_type count, T value = T() ); 到兼容的C ++ 11表单: void resize( size_type count ); void resize( size_type count, const value_type& value);

有没有一种方法可以迭代至多N个元素使用基于范围的循环?

我想知道是否有一个很好的方法来遍历一个容器中的最多N个元素,使用基于循环的范围和/或标准库中的algorithm(这就是整个问题,我知道我可以使用“old “为条件循环)。 基本上,我正在寻找对应于这个Python代码的东西: for i in arr[:N]: print(i)

我应该使用std :: for_each吗?

我总是试图更多地了解我使用的语言(不同的风格,框架,模式等)。 我注意到,我从来没有使用std::for_each所以我想也许我应该开始。 在这种情况下的目标是扩大我的想法,而不是在某种程度上改进代码(可读性,performance力,紧凑性等)。 因此,考虑到这种情况,使用std::for_each进行简单的任务(比如打印出一个向量)是一个好主意: for_each(v.begin(), v.end(), [](int n) { cout << n << endl; } ( [](int n)是一个lambda函数)。 代替: for(int i=0; i<v.size(); i++) { cout << v[i] << endl; } 我希望这个问题似乎没有意义。 我想这几乎要问一个更大的问题了……如果一个中级程序员使用语言function,尽pipe他现在不需要,但是只是为了让他能更好地理解这个function,它。 虽然这个更大的问题可能已经被问到(例如这里 )。

使map :: find操作不区分大小写

map :: find方法是否支持不区分大小写的search? 我有一张地图如下 map<string,vector<string> > directory; 并希望下面的search忽略大小写。 directory.find(search_string);

如何在std :: set <int>中find最大的int?

我有一个std::set<int> ,find这个集合中最大的int的正确方法是什么?

什么是std :: pair?

什么是std::pair ,为什么我会使用它, boost::compressed_pair带来了什么好处?

* *不*初始化其成员的C ++向量?

我正在为一个返回一个大数组的C代码做一个C ++包装器,所以我试图在一个vector<unsigned char>返回数据。 现在的问题是,数据是在兆字节的数量级 , vector不必要地初始化其存储,这本质上是减less了一半的速度。 我如何防止这种情况? 或者,如果这是不可能的 – 是否有其他的STL容器可以避免这种不必要的工作? 或者我必须最终制造我自己的容器? (预C ++ 11) 注意: 我传递的vector作为我的输出缓冲区 。 我不是从其他地方复制数据。 这是像这样的: vector<unsigned char> buf(size); // Why initialize?? GetMyDataFromC(&buf[0], buf.size());