草庐IT

external-sorting

全部标签

c++ - C++中extern "C"有什么作用?

将extern"C"放入C++代码中究竟有什么作用?例如:extern"C"{voidfoo();} 最佳答案 extern"C"使C++中的函数名称具有C链接(编译器不会破坏名称),以便客户端C代码可以使用C兼容header链接(使用)您的函数只包含函数声明的文件。您的函数定义包含在二进制格式中(由您的C++编译器编译),然后客户端C链接器将使用C名称链接到该二进制格式。由于C++具有函数名称的重载而C没有,C++编译器不能仅使用函数名称作为链接的唯一ID,因此它通过添加有关参数的信息来破坏名称。C编译器不需要破坏名称,因为您不能

c++ - std::sort() 和 std::sort_heap() 的内存复杂度是多少?

如标题-std::sort()和std::sort_heap()的内存复杂度是多少?(后者需要std::make_heap()所以我也想知道它的内存复杂度。)我尝试在这些网站上搜索:http://www.cplusplus.com/reference/http://en.cppreference.com/w/但要么我错过了,要么他们只提到了时间复杂度。上述函数的内存复杂性是否在任何地方指定(在C++标准或其他文档中)?或者这可能取决于实现? 最佳答案 对于std::sort()我在Cboard上找到了一个答案,它几乎是这样说的:Qu

c++ - 为什么他们坚持在下面的示例中使用 `extern` 说明符?

[basic.link]/6(我的重点):Thenameofafunctiondeclaredinblockscopeandthenameofavariabledeclaredbyablockscopeexterndeclarationhavelinkage....staticvoidf();staticinti=0;voidg(){externvoidf();//internallinkageinti;//#2ihasnolinkage{externvoidf();//internallinkage[basic.link]/7:...namespaceX{voidp(){q();//

c++ - 仅在 header 中的extern变量意外起作用,为什么?

我当前正在更新Arduino的C++库(使用avr-gcc编译的8位AVR处理器)。通常,默认Arduino库的作者喜欢在header中包含该类的extern变量,该变量也在.cpp类文件中定义。我认为基本上是为了让新手能够将所有东西都准备好作为内置对象。我遇到的情况是:我更新的库不再需要.cpp文件,并且已将其从库中删除。直到我进行最后一遍检查发现的错误之后,尽管没有为.cpp文件中的extern变量提供定义的事实,但没有产生链接器错误。这很简单,我可以得到它(头文件):structFoo{voidmethod(){}};externFoofoo;包含此代码并将其用于一个或多个源文件

c++ - 扭曲的逻辑 : a global variable in one file refers to an extern variable but is also referred by that extern variable

文件A.cpp:#includeexternintiA;externintiB=iA;intmain(){std::cout文件B.cppexternintiB;externintiA=2*iB;编译链接运行,out进来debug和release模式是0,0我的问题是它是如何工作的,为什么在链接阶段没有问题?我正在使用VC++2003。 最佳答案 初始化程序覆盖了extern关键字,因此这没有什么“神奇”:您只是在不同的翻译单元中声明和定义两个完全不相关的变量。来自StandardforProgrammingLanguageC++-

c++ - std::sort by unary 映射

C++标准库提供了将比较器传递给std::sort的功能.但是,我的代码中有很多情况需要对T的列表进行排序。函数对象f.像这样的比较器将是一个有效的选择:boolcompare(constT&a,constT&b){returnf(a)虽然这不是最优的。f评估速度很慢,但每次使用相同的T调用都会返回相同的值目的。所以我宁愿做的是计算f对范围内的每个对象一次,然后使用这些结果对它们进行排序。我的目标是编写这个函数(我没能做到):templatevoidsort(IterTleft,IterTright,Transformationf){/*?*/}在这次通话之后,f(*iter)对于所有

c++ - 传递给 std::sort 时,全局函数比仿函数或 lambda 慢

我做了一个小测试来检查全局函数/仿函数/lambda作为std::sort函数的比较器参数的性能。Functor和lambda具有相同的性能。我惊讶地发现,看起来是最简单回调的全局函数却慢得多。#include#include#include#include#include#include#include#include#includeusingnamespacestd;constintvector_size=100000;boolCompareFunction(conststring&s1,conststring&s2){returns1[0]v(vector_size);for(s

c++ - 如何强制 std::sort 使用 move 构造函数和 move 赋值?

我有一个类Data这是(就目前而言)不可复制的。std::sort在std::vector之所以有效,是因为我已经为Data定义了move构造函数和move赋值。.我这样做是因为类里面有很多数据,复制内容太慢了。但是,我现在正在考虑添加一个复制构造函数Data(constData&other)和标准赋值运算符(来自constData&)到类,出于不相关的原因。我如何确保当我对Data的vector进行排序时,std::sort还会使用move构造函数和move赋值吗? 最佳答案 HowcanImakesurethatwhenIsor

c++ - 为什么 std::sort 构造对象?

这个问题在这里已经有了答案:std::sortdoesnotalwayscallstd::swap(3个答案)关闭5年前。我创建了以下类来理解std::sort的行为:classX{public:X(inti):i_(i){}X(X&&rhs)noexcept:i_(std::move(rhs.i_)){mc_++;}X&operator=(X&&rhs)noexcept{i_=std::move(rhs.i_);ao_++;return*this;}voidswap(X&rhs)noexcept{std::swap(i_,rhs.i_);sw_++;}friendbooloperat

c++ - 更好地理解 extern "C"函数

我只是想进一步了解externC函数。据我所知,externC函数始终是您尝试从已编译的应用程序调用的函数。可执行文件、静态或动态库。extern"C"{HRESULTCreateDevice();typedefHRESULT(*CREATEDEVICE)();HRESULTReleaseDevice();typedefHRESULT(*RELEASEDEVICE)();}所以我的问题是...我的理解对吗??它总是必须是C函数指针吗??'为什么必须为每个函数使用typedef??我假设当您使用GetProcAddress()时。您正在为特定应用程序HEAP而不是您从中调用它的应用程序分