草庐IT

rdbg_std_amd

全部标签

c++ - std::merge 和相等的元素顺序

std::merge在其输入列表中保留相等元素的顺序。它是否保证第一个列表中的元素出现在第二个列表中的相等元素之前,或者该保证仅适用于单个输入列表中的相等元素?例子:List1有1个元素,A。List2有1个元素,B。比较器认为A和B相等。如果我std::merge(list1.begin(),list1.end(),list2.begin(),list2.end(),out,comparator),就是相对顺序A和B在输出中的定义?我的意见是标准在这种情况下没有定义顺序。 最佳答案 C++14标准草案(n3797):17.6.5.

c++ - 如何获得 -std=c++11 w/libstdc++?

为什么这行不通:#includeintmain(){return0;}编译为:clang++-std=c++11-stdlib=libstdc++temp.cpptemp.cpp:1:10:fatalerror:'regex'filenotfound#include^1errorgenerated.clang++--versionAppleLLVMversion7.0.0(clang-700.1.76)Target:x86_64-apple-darwin14.5.0Threadmodel:posix如果我允许stdlib为libc++则它会编译。正则表达式是c++11,但是clang似

c++ - 如何实现自定义 std::streambuf 的 seekoff()?

我有以下实现基于例如thisquestionandanswerstructmembuf:std::streambuf{membuf(char*begin,char*end){this->setg(begin,begin,end);}protected:virtualpos_typeseekoff(off_typeoff,std::ios_base::seekdirdir,std::ios_base::openmodewhich=std::ios_base::in){std::istream::pos_typeret;if(dir==std::ios_base::cur){this->g

c++ - 分离的 std::thread 终止后是否需要删除?

我创建了一个newstd::thread对象,然后detach()它。线程运行任意时间,然后自行终止。由于我使用new创建了对象,我是否需要在某个时候delete来释放它的资源?还是线程在终止时有效地删除自身?如果它确实有效地删除自身,如果我在它终止后显式删除它,是否会发生不好的事情? 最佳答案 是的,你必须自己删除它。一旦您调用std::thread::detach,线程将与线程对象分离并允许独立执行,然后线程对象将不再拥有任何线程。所以线程不会也不可能在终止时删除它。 关于c++-分

c++ - std::map:它可以在插入键后复制和移动键吗?

换句话说,存储指向映射中的键的指针是否安全?或者map是否有可能在其生命周期内复制和移动键,从而使现有指针无效?文档说:“迭代器有效性:没有变化。”这是否意味着我的问题的答案是“不,它们不能被复制或移动”? 最佳答案 std::map容器模板提供了一个基于节点的容器,这意味着迭代器和对容器元素的引用永远不会失效,直到元素被从中删除map。因此,只要map处于事件状态并且元素仍在其中,您就可以将元素键地址分发给第三方。 关于c++-std::map:它可以在插入键后复制和移动键吗?,我们在

c++ - std::logical_not 和 std::not1 之间的区别?

请举例说明何时使用std::logical_not以及何时使用std::not1!根据文档,前者是“一元函数对象类”,而后者是“构造一元函数对象”。所以最终两者都构造了一个一元函数对象,不是吗? 最佳答案 两者都是仿函数(具有operator()的类),但它们取反的内容略有不同:std::logical_not::operator()返回T::operator!().在语义上,它看到T作为一个值并将其取反。std::not1::operator()返回!(T::operator()(T::argument_type&)).在语义上,

c++ - 如何将 `std::array` 用作 `template<typename> class` 形式的模板参数?

请考虑以下tree类templateclassTuple>classtree{private:Tm_value;Tuplem_children;};templateusingstatic_tree=tree>;定义不明确。std::array不是Tuple的合适模板参数.我假设static_tree的意图清楚了。我们可以做类似的事情templatestructhelper{templateusingtype=std::array;};templateusingstatic_tree=tree::templatetype>;没有helper还有其他选择吗?类(class)?

c++ - 在所有 std::futures 完成之前从函数返回是否安全?

我有这样的代码:intfunction(){std::vector>futures;for(constauto&elem:elements){futures.push_back(std::async(&MyClass::foo,myClass,elem);}for(auto&f:futures){constintx=f.get();if(x!=0)returnx;}}当有未完成的异步调用时,我可以从函数中返回吗?我只对一个非零值感兴趣。我应该等到所有异步调用完成吗?这段代码安全吗? 最佳答案 std::future的析构函数(当通过

c++ - std::vector 中的二进制搜索

我正在尝试寻找vector元素在另一个vector中的位置。在这里,我有兴趣使用与binarysearch一样快的实现。我有不同的长度为100万或更长的vector,所以我正在尝试更快地实现某些目标。我的情况如下:1)我正在搜索的vector已排序。2)我正在搜索的元素将始终存在,即我没有notfound的情况,我想获得索引vector元素以更快的方式。我尝试了以下代码来获取vector元素的索引。#include#include#includetemplateIterbinary_find(Iterbegin,Iterend,Tval){Iteri=std::lower_bound(

C++:&(std::cout) 作为模板参数

为什么不能将std::cout的地址作为模板参数传递?或者,如果可能的话,怎么做?这是我尝试过的:#includetemplateclassMyClass{public:voiddisp(void){(*stream)MyObj;MyObj.disp();return0;}我从clang++-std=c++11得到的错误信息:main.cpp:15:11:error:non-typetemplateargumentdoesnotrefertoanydeclarationMyClassMyObj;^~~~~~~~~~~main.cpp:6:24:note:templateparamete