草庐IT

std=c++11

全部标签

c++ - std::async 超时

有没有办法在std::async方法中实现超时,所以如果线程在指定的时间内没有完成,我希望这个调用超时并完成。我该如何实现此功能。 最佳答案 没有(标准的)方法可以进入线程并杀死它,无论如何这通常不是一个好主意。更简洁的选择是将开始时间和最长持续时间传递给函数,然后(可能随着计算的进行多次)检查当前时间减去开始时间是否太长。我会做这样的事情:#includetemplateclasstimeout{public:typedefClockclock_type;typedeftypenameclock_type::time_pointt

c++ - std::bind - 在 vi​​sual studio 中编译意外(未声明的标识符)错误

好吧,如果我正确理解std::bind,我可以使用_1之类的参数来定义一个未给定的参数?正确的?考虑以下行:std::functionfunc(std::bind(&Pred,_1,"name"));这应该行得通,对吧?这将用于std::find_if()函数,因此第一个参数应该是值类型,第二个参数应该是字符串。但是visualstudio2010对此提示并显示以下错误消息:errorC2065:'_1':undeclaredidentifier这很奇怪,我怎么能在visualstudio中说“嘿,第一个参数未绑定(bind)”。Pred是一个以value_type,conststd:

c++ - 如何优雅地将所有枚举放入 std::set

我有一个枚举,我想将它们全部放入集合中(然后使用set_intersection算法删除一些,但这是题外话)。除了我卡在第1步之外,一切都很好。:)如果我有(真实类具有更高基数的枚举)classMyClass{enumColor{red,green,blue}};我将如何初始化std::set包含所有枚举。我显然可以一个接一个地手动插入它们,做一个带强制转换的for循环,因为它们是连续的并且从0开始(我认为如果我不在枚举定义中使用=则这是必需的),但我正在寻找一种更优雅的方式。编辑:如果可能的话,我更喜欢C++03解决方案,因为当前的问题实例需要它,但如果不是,C++11也很好知道。

c++ - 如何在 Visual Studio 中使用 C++11 线程

在开始之前,我想说明一下,我是一名新手,很可能我错过了一些简单的事情,或者我只是不知道一些简单的事情。我想使用visualstudio进行一些线程练习,但我无法将其包含在我的代码顶部。我知道这是C++11的新功能,但我不确定它是否已为VisualStudio2010启用,或者如果未启用,我不确定我将如何去做。这是我的代码的截图: 最佳答案 你不能:C++11的线程支持库不受VS2010附带的C++标准库的实现支持。如果你想使用它,你应该升级到VS2012。或者,您可以使用Boost.Thread,它为C++11的标准线程支持库提供了

c++ - C++11 是否强制要求 vector<int> 将 resize() 中的元素归零?

这个问题在这里已经有了答案:std::vector,defaultconstruction,C++11andbreakingchanges(2个答案)关闭9年前。这个问题是关于new[]int和new[]int()在语义和性能上的差异,以及在向allocator_traits::construct添加ctor参数的完美转发时可能无意中创建的从第一个到第二个措辞的变化().这个问题不涉及一个非常明显的问题,即默认ctor运行在由vector的resize()构造的所有新元素上。对我来说,在调整大小时清除内置类型vector的元素似乎是一种浪费。但是VS2012的实现使得resize(n)

在 std::array 中使用默认参数调用 C++ 函数?

现在我有一个C++函数voidF(std::arrayx){//...}我希望参数“x”可以有一个默认值,我该怎么做?如果不是函数参数,我可以简单地使用std::arrayx={1,2,3};但是对于函数参数,代码voidF(std::arrayx={1,2,3}){//...}会导致编译错误。我在MSVC2012中测试,遇到错误C2143、C2059、C2447。还有g++4.6.3中的错误有什么办法让它有默认值吗?谢谢。 最佳答案 您的解决方案应符合标准,但在某些编译器中未实现。它们中的大多数可以使用语法x={{1,2,3}}初

c++ - 使用 std::list 提高简单性

有哪些更好(更清洁、更易读和/或更有效)的方法:std::listApples;std::listBasket;for(std::list::iteratorniApple(Apples.begin());niApple!=Apples.end();niApple++){for(std::list::iteratorniBasket(Basket.begin());niBasket!=Basket.end();niBasket++){if(&(*niBasket)==*niApple){Basket.erase(niBasket);break;}}//loop}//loop你会推荐什么

c++ - std::map - 如何更改键排序?

我对std::map有疑问。我用它来映射特定索引下的一些对列表:map>>List;Dijkstra算法中使用了它。主要问题是map按字母顺序对string键进行排序,如下所示:AAA,AA0,AA1,AAB,AC1=AA0->AA1->AAA->AAB->AC1但我想用不同的方式对它进行排序:AAA,AA0,AA1,AAB,AC1=AAA->AAB->AA0->AA1->AC1有什么解决办法吗?我读到过自己制作比较类,但我不知道该怎么做。还是有其他方法可以解决? 最佳答案 您必须提供自己的比较仿函数,它必须在实例化map时作为第三

C++11 从初始化列表到数组参数的隐式转换

在C++11中,是否可以做类似下面的事情?templatevoidfoo(arraysrc){...}...foo({1,2,3})我目前正在运行GCC4.8。 最佳答案 是的,我设法完成了以下工作(因为您允许类似的事情):templatevoidfoo(arraysrc){...}...foo('a','b');foo(1,2,3);方法如下:#include#include#includeusingnamespacestd;templatevoidfoo(arraysrc){for(autoe:src)coutautomake_

c++ - 在不丢失索引信息的情况下对 std::vector 进行排序

我想在不丢失索引信息的情况下使用存储值对std::vector进行排序。例如,std::vectorvec;vec.resize(3);vec[0]=20;vec[1]=10;vec[2]=6;std::sort(vec.begin(),vec.end());//HereIwanttoknowtheorderofindicesaftersortoperationwhichis2,1,0 最佳答案 您想保存原始vector的排列,因此您需要另一个vector来从{0,...,n-1}构建正确的双射到{0,...,n-1}:vector