草庐IT

c++ - 为什么要区分通用算法的谓词和非谓词版本?

标准库确实区分了通用算法的谓词和非谓词版本。例如,std::sort()看起来像:templatevoidsort(RandomItfirst,RandomItlast);templatevoidsort(RandomItfirst,RandomItlast,Comparecomp);只写下面有什么问题吗?template>voidsort(RandomItfirst,RandomItlast,Comparecomp=Compare{}); 最佳答案 相当多的历史原因。C++98/03没有函数模板的默认模板参数,所以它必须使用两个重

c++ - 字符串的最小字典序值

用运算符最小的字符串是什么?更具体地说,什么是比任何其他字符串都小(使用 最佳答案 空字符串是所有字符串中“最小的”——也就是说,它比较小于任何非空字符串。§21.4.8.4[string::optemplatebooloperator&lhs,constbasic_string&rhs)noexcept;1Returns:lhs.compare(rhs).§21.4.7.9[字符串::比较]:intcompare(constbasic_string&str)constnoexcept;1Effects:Determinesthee

c++ - 比较两个具有相同值的 TCHAR 结果为 false

我正在尝试检查我的应用程序路径,如果它不是指定路径,则移动它。我觉得我的代码很可靠,但它不能正常工作。TCHARpCheck[MAX_PATH];TCHARxPath[MAX_PATH];GetModuleFileName(NULL,xPath,MAX_PATH);if(SHGetSpecialFolderPath(HWND_DESKTOP,pCheck,CSIDL_DESKTOP,FALSE)){wcscat(pCheck,L"\\NewFile.exe");MessageBox(NULL,pCheck,NULL,NULL);MessageBox(NULL,xPath,NULL,NU

c++ - 模板实例化错误

我有如下定义的模板函数“compare”。#includeusingnamespacestd;templatevoidcompare(constT&a,constT&b){cout当我实例化与相同长度的字符串文字进行比较时,编译器不会报错。当我用不同长度的文字来做时,它说“错误:没有匹配的函数来调用比较(constchar[3],constchar[5])”我很困惑,因为比较函数应该用字符指针而不是实例化字符数组。字符串文字不应该总是衰减为指针吗? 最佳答案 如果您将声明更改为:,您的示例将编译:voidcompare(constT

c++ - 标准::原子 | compare_exchange_weak 与 compare_exchange_strong

我不确定是我不理解还是文档没有明确制定。以下摘自最新草案(N3126,第29.6节):boolatomic_compare_exchange_weak(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_weak(A*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(A*object,C*

c++ - 使用 std::atomic::compare_exchange_strong 时,对 std::atomic 的写入是否会被其他线程看不到?

std::atomicg_atomic;voidthread0(){intoldVal=0;intnewVal=1;while(g_atomic.compare_exchange_strong(oldVal,newVal,std::memory_order_acq_rel,std::memory_order_acquire)){//forevercountingfrom0to100untilunexpectedvalueappearsoldVal=newVal;newVal=(oldVal+1)%100;};}voidthread1(){//setunexpectedvalueg_at

c++ - G++ CAS (__sync_val_compare_and_swap) 问题需要解释

这让我很头疼。我正在尝试实现一些“无锁”代码并使用CAS(gcc__sync_val_compare_and_swap)来完成繁重的工作。我的问题可以用下面的代码显示。volatileboollock;void*locktest(void*arg){for(inti=0;i好的,如果我在10个并发线程中运行上面的代码,一切都很好。但是,如果我将代码改为阅读//acquirealockwhile(__sync_val_compare_and_swap(&lock,lock,true)==true)请注意,我已将“false”更改为“lock”。一切都乱套了,断言//makesureweh

c++ - 为什么自由函数和成员函数都存在用于比较和交换操作?

C++标准库同时具有freefunctions和memberfunctions用于原子比较和交换操作。如freefunctions所述:Thesefunctionsaredefinedintermsofmemberfunctionsofstd::atomic:obj->compare_exchange_weak(*expected,desired)obj->compare_exchange_strong(*expected,desired)obj->compare_exchange_weak(*expected,desired,succ,fail)obj->compare_exchan

c++ - 如何 std::find 使用比较对象?

我对std::find的接口(interface)感到困惑。为什么它不用Compare对象来告诉它如何比较两个对象?如果我可以传递一个Compare对象,我可以使下面的代码工作,我想在其中按值进行比较,而不是直接比较指针值:typedefstd::vectorVec;Vecvec;std::string*s1=newstd::string("foo");std::string*s2=newstd::string("foo");vec.push_back(s1);Vec::const_iteratorfound=std::find(vec.begin(),vec.end(),s2);//

c++ - 比较C++中的2个日期

我想知道C++中有没有比较简单和简短的日期比较函数。我的日期是char*类型,格式如下:DD\MM\YYYY谢谢。 最佳答案 解析通常在流上完成,而不是字符串,但您可以使用stringstream.std::istringstreamdate_s("04\\10\\1984");structtmdate_c;date_s>>std::get_time(&date_c,"%d\\%m\\%Y");std::time_tseconds=std::mktime(&date_c);现在您可以使用来比较秒数以确定哪个更早。请注意,std::g