草庐IT

stl_algobase

全部标签

c++ - 如何 fold STL 容器?

我需要一个类似Haskell的foldl函数来fold任何STL容器。预期签名如下:templateIterator,FoldingFunction,ResultResultfoldl(Iteratorbegin,Iteratorend,FoldingFunctionf,ResultinitValue);标准STL没有这样的功能。Boost有吗?我知道实现起来很简单,但我想知道是否有现成的标准化实现。还有一个问题:您通常如何在C++/STL中fold数据列表? 最佳答案 STL确实有这样的功能:std::accumulate.但是,

c++ - STL vector 和 c++ : how to . 在没有默认构造函数的情况下调整大小?

我如何告诉STL,特别是对于vector中的方法resize(),使用默认构造函数以外的构造函数以及使用哪些参数来初始化对象?例如:classsomething{inta;something(intvalue);}std::vectormany_things;many_things.resize(20);更一般地,当STL需要创建对象并将参数传递给该构造函数时,如何强制STL使用我的构造函数?在我的情况下,添加默认构造函数不是一种选择,我不希望使用指针数组来解决问题。 最佳答案 使用2参数重载:many_things.resize(

c++ - STL vector 和 c++ : how to . 在没有默认构造函数的情况下调整大小?

我如何告诉STL,特别是对于vector中的方法resize(),使用默认构造函数以外的构造函数以及使用哪些参数来初始化对象?例如:classsomething{inta;something(intvalue);}std::vectormany_things;many_things.resize(20);更一般地,当STL需要创建对象并将参数传递给该构造函数时,如何强制STL使用我的构造函数?在我的情况下,添加默认构造函数不是一种选择,我不希望使用指针数组来解决问题。 最佳答案 使用2参数重载:many_things.resize(

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - STL 迭代器是否保证集合更改后的有效性?

假设我有某种集合,并且我在它的开头获得了一个迭代器。现在假设我修改了集合。无论集合或迭代器的类型如何,我仍然可以安全地使用迭代器吗?为避免混淆,以下是我所说的操作顺序:获取集合的迭代器。修改集合(显然不是其中的元素,而是集合本身)。使用第1步得到的迭代器,按照STL标准还有效吗?! 最佳答案 取决于容器。例如如果是vector,修改容器后所有的迭代器都会失效。但是,如果是list,则与修改的地方无关的迭代器将保持有效。Avector'siteratorsareinvalidatedwhenitsmemoryisreallocated

c++ - C++ STL中的二叉搜索树实现?

请问您知道C++STL是否包含二叉搜索树(BST)实现,或者我是否应该构建自己的BST对象?如果STL不包含BST的实现,是否有可用的库?我的目标是能够尽快找到所需的记录:我有一个记录列表(它不应该超过几千个。),我做一个每帧(它是一个电脑游戏)在该列表中搜索。我使用unsignedint作为我感兴趣的记录的标识符。无论哪种方式最快对我来说都是最好的。 最佳答案 您需要一种在给定key的情况下查找某些数据的方法。由于键是unsignedint,这为您提供了多种可能性。当然,你可以使用std::map:typedefstd::mapm

c++ - C++ STL中的二叉搜索树实现?

请问您知道C++STL是否包含二叉搜索树(BST)实现,或者我是否应该构建自己的BST对象?如果STL不包含BST的实现,是否有可用的库?我的目标是能够尽快找到所需的记录:我有一个记录列表(它不应该超过几千个。),我做一个每帧(它是一个电脑游戏)在该列表中搜索。我使用unsignedint作为我感兴趣的记录的标识符。无论哪种方式最快对我来说都是最好的。 最佳答案 您需要一种在给定key的情况下查找某些数据的方法。由于键是unsignedint,这为您提供了多种可能性。当然,你可以使用std::map:typedefstd::mapm

c++ - 为什么 STL 容器优于 MFC 容器?

以前,我使用过CArray和CMap等MFC集合类。一段时间后,我切换到STL容器并使用了一段时间。虽然我发现STL好多了,但我无法指出它的确切原因。一些推理如:它需要MFC:不成立,因为我的程序的其他部分使用了MFC它取决于平台:不成立,因为我只在Windows上运行我的应用程序。(不需要可移植性)在C++标准中定义:好的,但MFC容器仍然可以工作我能想到的唯一原因是我可以在容器上使用算法。还有什么我在这里遗漏的其他原因-是什么让STL容器比MFC容器更好? 最佳答案 RonaldLaeremans,VC++产品部门经理,甚至sa

c++ - 为什么 STL 容器优于 MFC 容器?

以前,我使用过CArray和CMap等MFC集合类。一段时间后,我切换到STL容器并使用了一段时间。虽然我发现STL好多了,但我无法指出它的确切原因。一些推理如:它需要MFC:不成立,因为我的程序的其他部分使用了MFC它取决于平台:不成立,因为我只在Windows上运行我的应用程序。(不需要可移植性)在C++标准中定义:好的,但MFC容器仍然可以工作我能想到的唯一原因是我可以在容器上使用算法。还有什么我在这里遗漏的其他原因-是什么让STL容器比MFC容器更好? 最佳答案 RonaldLaeremans,VC++产品部门经理,甚至sa

c++ - 在 Visual Studio 2015 中检查 STL 容器

我正在运行VisualStudioEnterprise2015,版本14.0.23107.0D14REL。调试C++程序时,我看不到STL容器的内容。我没有选中“在变量窗口中显示对象的原始结构”选项(工具->选项->调试->常规)。这是一个说明问题的例子:#include#include#includeintmain(){std::stringstring="test";std::vectorvector{4,5,6};std::listlist{"one","two","three"};return0;}在Locals或Watch窗口中,我看到以下内容:list[...]()vect