草庐IT

std-proposals

全部标签

c++ - 如何将 std::set 的元素添加到另一个非空集?

setA,B;for(inti=0;i如何将集合B的元素添加到集合A中?也就是说,如何实现A=Union(A,B)? 最佳答案 默认情况下,集合仅为唯一值并已排序,因此插入迭代器范围应该可行:A.insert(B.begin(),B.end()); 关于c++-如何将std::set的元素添加到另一个非空集?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/11056017/

c++ - 将 std::mutex 用于由 boost::asio 管理的线程池

以某种方式跟进了thisquestion.我只是想知道在由boost::asio:io_service处理的函数中使用std::mutex是否可以?股的使用有点不切实际。根据我在boostreference中的发现我会说没关系。因为它指出Asynchronouscompletionhandlerswillonlybecalledfromthreadsthatarecurrentlycallingio_service::run().所以boost创建的其他线程不应该干涉。我做对了吗? 最佳答案 正如其他人所指出的,std::mutex

c++ - 使用迭代器遍历和取消遍历 std::vector 的最干净的方法是什么?

我有一种情况,我正在通过一个vector行进,做一些事情:std::vector::iteratoriter=my_list.begin();for(;iter!=my_list.end();++iter){if(iter->doStuff())//returnstrueifsuccessful,falseo/w{//Keepgoing...}else{for(;iter!=m_list.begin();--iter)//...Thiswon'twork...{iter->undoStuff();}}}在正常情况下-假设一切顺利-我一直前进到my_list.end()并成功结束循环。但

c++ - std::list 固定大小

如何创建具有固定元素计数的std::list? 最佳答案 如果您只想要一个固定大小的容器,也许您正在寻找std::tr1::array.(或者对于C++0x只是std::array。)如果您不插入或删除元素,我认为使用std::list没有任何优势。而不是std::array或std::vector. 关于c++-std::list固定大小,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

C++ 命名空间成员在不同文件中的访问如何进行? "namespace std"是如何实现的?

我在sample.h中声明了下面的命名空间//namespacewithidentifiernamespaceN1{intb=80;}sample1.cpp使用上面的命名空间声明#include#include"sample.h"usingnamespacestd;usingnamespaceN1;intmain(void){coutsample2.cpp也使用了sample.h中声明的命名空间#include#include"sample.h"usingnamespacestd;usingnamespaceN1;voidfoo(void){cout编译时出现如下错误$>g++samp

C++ std::vector std::sort 无限循环

每当我尝试对导致无限循环的对象vector进行排序时,我都会遇到一个问题。我正在使用传递给排序函数的自定义比较函数。我能够通过在两个对象相等而不是true时返回false来解决问题,但我不完全理解解决方案。我认为这是因为我的比较函数违反了cplusplus.com上概述的这条规则:Comparisonfunctionobjectthat,takingtwovaluesofthesametypethanthosecontainedintherange,returnstrueifthefirstargumentgoesbeforethesecondargumentinthespecific

C++:是否可以从重载 << 运算符的对象中获取 std::string?

我有一个可以用std::cout打印到控制台的对象,但我无法获得std::string离开它,因为它似乎没有实现类似.string()的东西方法。我想我也许可以使用那个重载运算符来获取所有内容的字符串表示形式,而不必在每次需要时都自己实现一个函数,尽管在这个问题上没有发现任何东西让我认为这是不可能的. 最佳答案 使用std::ostringstream。它是一个写入字符串的C++流实现。 关于C++:是否可以从重载 https://stackoverflow.com/que

c++ - std::sort 如何仅使用迭代器实现交换操作?

我如何实现例如以下内容templatevoidSwap(ITERATORa,ITERATORb){...}因此Swap(a,b)交换a和b指向的值。换句话说:如何在不知道数据类型的情况下创建第三个变量? 最佳答案 有iter_swap只是为了那份工作:std::iter_swap(a,b);此外,如果您可以使用c++11,则可以使用decltype:std::remove_reference::typec=*a;*a=*b;*b=c; 关于c++-std::sort如何仅使用迭代器实现交

c++ - 使用 std::map 而不是 vector<pair<string, string>> 我会看到性能提升吗?

我目前有一些代码在使用vector的pair.这用于存储来自XML解析的一些数据,因此,这个过程在某些地方非常慢。在尝试加快整个过程方面,我想知道从vector>切换是否会有任何性能优势。至std::map?我可以对其进行编码并运行分析器,但我想我会先看看是否能得到一个表明一些明显的性能提升的答案。我不需要做任何排序,我只是将项目添加到vector中,然后在稍后阶段迭代内容并进行一些处理——我不需要排序或任何类似的东西。我猜也许我不会获得任何性能提升,但我从未真正使用过std::map之前,所以如果不询问或编写代码我就不知道了。 最佳答案

c++ - 在 C++ 中,如何使用模板函数作为 std::for_each 中的第三个参数?

我正在尝试使用std::for_each来输出可能包含不同类型的vector的内容。所以我写了一个像这样的通用输出函数:templatevoidoutput(constT&val){cout我想与它一起使用:std::for_each(vec_out.begin(),vec_out.end(),output);但是编译器在for_each语句中提示“无法推断模板参数”。还提示“函数模板不能作为另一个函数模板的参数”。这不可能吗?我原以为编译器会知道vec_o​​ut的类型(它是vector),所以应该实例化函数“output(constdouble&val)”?如果这不起作用,我如何在