草庐IT

stl-algorithm

全部标签

c++ - 为什么 STL ifstream 和 ofstream 类不将 std::string 作为文件名?

这是对STL的提示。为什么他们将文件名参数作为(char*)而不是std::string?这似乎没有意义。关于这个主题还有另外两个问题:HowtoopenunicodefilenameswithSTLWindowsCodepageinteractionswithC++问题是我有很多看起来像这样的代码:std::ofstreamf(fname.c_str());当我希望它看起来像这样时:std::ofstreamf(fname);上述帖子中提到的其他问题是UTF-16与UTF-8的问题。(UTF-16可能包含会破坏POSIXAPI的NULL)。但这并不是真正的问题,因为实现可以在调用op

c++ - STL 算法是否使用多核?

C++STL算法是否使用CPU的多核底层来提高性能?如果不,是否有任何推荐的库来做STL所做的但多核,比如使用OpenMP?或者是否有任何开关可以在编译期间指定gcc指示STL使用多个内核编辑:我在带有gcc4.4的Ubuntu10.10上使用英特尔酷睿i7960处理器 最佳答案 GNUlibstdc++似乎有一个并行模式,支持STL的几个并行化特性:http://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html 关于c

c++ - 如何插入STL集?

我有问题,我不确定我是否理解STL文档。假设我有这个:#include...structfoo{intbar;};structcomp{inlinebooloperator()(constfoo&left,constfoo&right){returnleft.barfooset;//Usescomparisonstruct/classobjectcomptosortthecontainer...return0;}如何使用我自己的比较器结构将结构foo插入到set中? 最佳答案 您可以使用set::insert方法,没有什么可做的。例

c++ - 在相同的输入迭代器范围内并排运行两个 <algorithm>

如果我想计算从std::istream中检索到的一堆数字的总和,我可以执行以下操作://std::istream&is=...inttotal=std::accumulate(std::istream_iterator(is),std::istream_iterator(),0);但是,如果我想计算它们的平均值,我需要累加两个不同的结果:总和(std::accumulate)总计数(std::distance)有什么方法可以“合并”这两种算法并在迭代器范围的一次传递中“并排”运行它们吗?我想做类似的事情:usingstd::placeholders;inttotal,count;std

c++ - 具有重复键的 STL 优先级队列 - 这可能吗?

我需要将我的A类对象存储在某种数据结构中。此外,我希望它们根据一个键自动排序,在我的例子中是另一个类B的嵌入对象。因此我决定使用STL优先级队列。然而,有可能2个或更多对象B具有相同的键值。我的问题:STL优先级队列是否允许重复键?如果确实如此,我应该考虑什么以及我应该使用哪个谓词?我知道我可以使用多重集,但它的大O符号性能更差,这就是我想使用优先级队列的原因。 最佳答案 DoestheSTLpriorityqueueallowduplicatekeys??是的。IfitdoeswhatshouldIconsider相等元素之间的顺

c++ - STL列表、 vector 和集合的底层数据结构是什么?

STL列表、vector和集合的底层数据结构是什么?我的解决方案:vector:(动态分配)数组列表:?设置:堆(或所有叶节点尽可能靠左的二叉树,并将最小/最大元素保持在顶部)对吧? 最佳答案 根据评论,澄清一下,这些是最常见的选择,但根据所需的复杂性和其他因素,这些实现的支持可能会有所不同:Vector=动态调整数组大小列表=DoublyLinkedList设置=Red/BlackTree(平衡二叉搜索树)我认为您可能会混淆堆和BST。堆被形象化为一棵树,但它实际上建立在可索引列表结构(例如数组或vector)之上。C++通过al

c++ - STL MAP 应该使用 find() 或 [n] 标识符在 map 中查找元素?

我很困惑哪个更有效率?既然可以直接访问map,为什么还要用find呢?我只需要知道哪种方式更有效。#include#includeusingnamespacestd;intmain(){mapmymap;map::iteratorit;mymap['a']=50;mymap['b']=100;mymap['c']=150;mymap['d']=200;//onewayit=mymap.find('b');cout提前致谢!:) 最佳答案 使用find意味着如果键不存在,您不会无意中在map中创建一个新元素,更重要的是,这意味着您可以

c++ - STL 的发现背后的算法是什么?

我刚刚为map中的字符串创建了一个自定义查找函数。我开发了某种线性搜索算法(后来才知道),但对该函数的速度不满意。所以我搜索了一个更快的函数,找到了map自己的函数:ma​​p::find。这比我使用的线性算法快得令人难以置信。在另一个示例中,STL的函数find也比我正在使用的另一个线性函数快得多。但这怎么可能呢?如果您使用二进制搜索算法,您需要首先对map进行排序,这将花费(假设)更多的时间,您的map越大。还有如何找出那些核心功能背后的算法?是否有列表或某种数据库可以查明这一点?感谢您的所有回答!我对最佳答案投了赞成票并接受了MaxLybbert的答案,因为它是最详细的答案。保罗

c++ - C++的STL priority_queue with struct

我们如何将STLpriority_queue用于结构?任何插入和弹出的插图,其中结构具有多种数据类型?说:structthing{inta;charb;}glass[10];.现在如何使用“inta”将此结构放入priority_queue进行排序? 最佳答案 这里是对youroriginalquestion,whichyoudeleted的略微修改的答案没有明显的原因。原始文件包含足够的信息供您弄清楚这一点,但这里是这样的:提供一个使用int进行比较的小于比较。您需要做的就是提供一个仿函数来实现与严格弱排序的小于比较,或者为您的类

c++ - STL 容器作为模板参数

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭9年前。Improvethisquestion我正在尝试将STL容器作为模板参数传递。在这种情况下,vector。这是我的非功能代码:templateclassTContainer,classTObject>classFoobar{public:explicitFoobar(TContainer&container):container_(container){}private:TContainer&container_;};int_tmai