草庐IT

stl_algobase

全部标签

c++ - STL 的 list::sort() 使用哪种排序算法?

我有一个随机整数列表。我想知道list::sort()方法使用哪种算法。例如。在以下代码中:listmylist;//..insertamillionvaluesmylist.sort();编辑:另见thismorespecificquestion. 最佳答案 该标准不需要特定的算法,只是它必须是稳定的,并且它使用大约NlgN比较来完成排序。例如,这允许快速排序的合并排序或链表版本(与流行的看法相反,快速排序并非必然不稳定,尽管数组最常见的实现是)。有了这个附带条件,简短的回答是,在大多数当前的标准库中,std::sort被实现为一

c++ - C++ 中 STL 集的底层数据结构是什么?

我想知道一个集合是如何在C++中实现的。如果我在不使用STL提供的容器的情况下实现自己的set容器,那么完成这项任务的最佳方法是什么?我了解STL集基于二叉搜索树的抽象数据结构。那么底层数据结构是什么?一个数组?另外,insert()如何对集合起作用?集合如何检查一个元素是否已经存在于其中?我在维基百科上读到,实现集合的另一种方法是使用哈希表。这将如何运作? 最佳答案 单步调试到g++6.4stdlibc++源代码你知道在Ubuntu的16.04默认g++-6包或GCC6.4buildfromsource无需任何进一步设置即可进入C

c++ - C++ 中 STL 集的底层数据结构是什么?

我想知道一个集合是如何在C++中实现的。如果我在不使用STL提供的容器的情况下实现自己的set容器,那么完成这项任务的最佳方法是什么?我了解STL集基于二叉搜索树的抽象数据结构。那么底层数据结构是什么?一个数组?另外,insert()如何对集合起作用?集合如何检查一个元素是否已经存在于其中?我在维基百科上读到,实现集合的另一种方法是使用哈希表。这将如何运作? 最佳答案 单步调试到g++6.4stdlibc++源代码你知道在Ubuntu的16.04默认g++-6包或GCC6.4buildfromsource无需任何进一步设置即可进入C

STL 或 boost 中的 C++ range/xrange 等价物?

在STL或boost中是否有与pythonXrange生成器等效的C++?xrange基本上每次调用++运算符都会生成递增的数字。构造函数是这样的:xrange(first,last,increment)希望对每个人都使用boost来做这样的事情:foreach(inti,xrange(N))我。我知道for循环。在我看来,它们的样板太多了。谢谢我的理由:我想要这样做的主要原因是因为我使用语音转文本软件,并且即使使用代码完成,通常的编程循环方式也很困难。拥有可发音的结构会更有效。许多循环从零开始并递增一,这是范围的默认值。我发现python构造更直观for(inti=0;i需要以范围为

STL 或 boost 中的 C++ range/xrange 等价物?

在STL或boost中是否有与pythonXrange生成器等效的C++?xrange基本上每次调用++运算符都会生成递增的数字。构造函数是这样的:xrange(first,last,increment)希望对每个人都使用boost来做这样的事情:foreach(inti,xrange(N))我。我知道for循环。在我看来,它们的样板太多了。谢谢我的理由:我想要这样做的主要原因是因为我使用语音转文本软件,并且即使使用代码完成,通常的编程循环方式也很困难。拥有可发音的结构会更有效。许多循环从零开始并递增一,这是范围的默认值。我发现python构造更直观for(inti=0;i需要以范围为

c++ - STL算法的可组合性

STL算法在C++中非常有用。但让我恼火的一件事是它们似乎缺乏可组合性。例如,假设我有一个vector>并希望将其转换为vector仅包含second对的成员。这很简单:std::vector>values=GetValues();std::vectorresult;std::transform(values.begin(),values.end(),std::back_inserter(result),[](std::pairp){returnp.second;});或者我想过滤vector仅适用于first的那些对成员是偶数。也很简单:std::vector>values=GetV

c++ - STL算法的可组合性

STL算法在C++中非常有用。但让我恼火的一件事是它们似乎缺乏可组合性。例如,假设我有一个vector>并希望将其转换为vector仅包含second对的成员。这很简单:std::vector>values=GetValues();std::vectorresult;std::transform(values.begin(),values.end(),std::back_inserter(result),[](std::pairp){returnp.second;});或者我想过滤vector仅适用于first的那些对成员是偶数。也很简单:std::vector>values=GetV

C++11 STL 容器和线程安全

我很难找到任何关于此的最新信息。C++11版本的STL容器是否保证了一定程度的线程安全?由于性能原因,我确实希望他们不会这样做。但是话又说回来,这就是为什么我们都有std::vector::operator[]和std::vector::at. 最佳答案 由于现有答案没有涵盖它(只有评论),我只提当前C++standardspecification的23.2.2[container.requirements.dataraces]其中说:implementationsarerequiredtoavoiddataraceswhenthe

C++11 STL 容器和线程安全

我很难找到任何关于此的最新信息。C++11版本的STL容器是否保证了一定程度的线程安全?由于性能原因,我确实希望他们不会这样做。但是话又说回来,这就是为什么我们都有std::vector::operator[]和std::vector::at. 最佳答案 由于现有答案没有涵盖它(只有评论),我只提当前C++standardspecification的23.2.2[container.requirements.dataraces]其中说:implementationsarerequiredtoavoiddataraceswhenthe

c++ - 使用 Xcode/LLDB 打印/调试 libc++ STL

我正在尝试在Xcode8中使用LLDB来调试非常基本的STL。我曾经能够像这样打印vector:pmyvector[0]查看第一个vector索引中的内容。现在当我这样做时,我得到了这个错误:error:Couldn'tlookupsymbols:__ZNSt3__16vectorI9my_classNS_9allocatorIS1_EEEixEm相反,我必须输入:pmyvector.__begin_[0]为了得到任何输出。我尝试从LLDBsvn存储库导入libcxx.py和unordered_multi.py脚本,但这似乎没有任何改变。有没有人能够使用libc++从LLDB获得任何有