草庐IT

C++标准

全部标签

C++ 标准库与凡人制作的代码 + 我在哪里可以找到源代码?

两个,也许是微不足道的问题:1.为什么我打不过STD功能?真的。我在过去三天里实现了一些比std::sort更快的东西,只是为了这样做。它应该是一个introsort,我怀疑它在内部使用了单枢轴版本的快速排序。史诗般的失败。我的至少慢了一倍。在我极度的痛苦中,我什至复制粘贴了其他一流的程序员代码。徒劳无功。我也对我的其他算法进行了基准测试……我的二进制搜索和upper_bound、lower_bound版本被精简到不能用更少的指令真正实现。不过,它们的速度大约是原来的两倍。我问,为什么,为什么,为什么?这引出了我的下一个问题......2。在哪里可以找到STL库函数的源代码?当然,我想

c++ - 堆栈内存如何工作或函数变量如何在堆栈上分配和访问

当我在这个page上读到Stack和Heap的例子时,我有一个问题,如果像页面上给出的示例一样,一个函数将其所有局部变量放在堆栈上,堆栈实际上是否访问不同的变量?因为堆栈通常只能访问顶部,所以它只能访问函数的一个变量。这是否意味着函数的变量存储在堆栈上的结构中? 最佳答案 堆栈指针,顾名思义,是一个和其他指针一样的指针,它指向普通的标准内存。要访问堆栈的任何区域,您只需向指针添加一个偏移量。如果你从C指针的角度来考虑它,你就有堆栈指针char*stack_pointer=some_memory;这个指针然后可以用作普通指针,包括添加

c++ - C 和 C++ : Array element access pointer vs int

如果您执行myarray[i]或将myarray[i]的地址存储在指针中,是否存在性能差异?编辑:这些指针都是在我的程序中一个不重要的步骤中计算出来的,性能不是标准。在关键部分,指针保持静态并且不被修改。现在的问题是这些静态指针是否比一直使用myarray[i]更快。​​ 最佳答案 对于这段代码:intmain(){inta[100],b[100];int*p=b;for(unsignedinti=0;i在g++中使用-O3优化构建时,语句:a[i]=i;产生汇编输出:mov%eax,(%ecx,%eax,4)和这个声明:*p++=

c++ - GCC 链接器找不到标准库?

我一直在用XCode开发一个学校项目。最终产品必须以带有makefile的源代码形式提交,因此我编写了一个makefile并以这种方式开始编译,以确保我有一个工作拷贝。这是我的生成文件:all:main.oStackList.oworld.oFarm.ogccmain.oStackList.oworld.oFarm.o-g-oProject1main.o:gcc-g-cmain.cppStackList.o:gcc-g-cStacklist.cppworld.cpp:gcc-g-cworld.cppFarm.cpp:gcc-g-cFarm.cppclean:rm*.oProject1编

c++ - 为什么用 new 创建的 C++ 数组与 C 样式数组的行为不同?

我正在自学C++,因此一直在编写一些示例代码来真正巩固我对指针和数组的理解。我是这样写的:intmyints[]={20,40,60,80,100};//Cstylearray?shouldbestoredonstack?ismyint'stypepointertointoranarrayofint?howdoesitdifferfrommyotherints?int*myotherints=newint[5]{20,40,60,80,100};//newalwaysreturnspointer,isthisaC++stylearray?//doesthispointergetcrea

c++ - 如何返回复杂的返回值?

目前我正在编写一些汇编语言程序。正如一些惯例所说,当我想向调用者返回一些值时,比如一个整数,我应该在EAX寄存器中返回它。现在我想知道如果我想返回一个float、一个double、一个枚举,甚至是一个复杂的结构怎么办。如何返回这些类型的值?我可以想到在EAX中返回一个指向内存中实际值的地址。但这是标准方式吗?非常感谢~~~ 最佳答案 如果调用者是您的代码,则完全取决于您。如果调用者不受您的控制,您必须遵循他们现有的约定或共同制定您自己的约定。例如,在x86平台上,当FPU指令处理浮点运算时,函数的结果作为FPU寄存器堆栈的顶部值返回

c++ - 为什么我可以在 C 中调用函数而不声明它,但不能在 C++ 中调用?

在C++中,在函数声明之前调用它是一个编译器错误。但在C中,它可能会编译。#includeintmain(){foo();//foo()iscalledbeforeitsdeclaration/definition}intfoo(){printf("Hello");return0;}我试过并且知道它是正确的,但我无法理解背后的原因。任何人都可以解释编译过程实际上是如何发生的以及两种语言的不同之处。 最佳答案 事实是代码“编译”为c程序并不意味着你可以做到。编译器应该警告函数foo()的隐式声明。在这种特殊情况下,隐式声明将声明一个相

c++ - 如何让 FindFirstFile 对文件进行排序

我正在使用标准的FindFirst和FindNext来检索目录中的所有文件但我需要对结果进行排序(按照与在资源管理器中单击名称列基本排序相同的顺序)我怎样才能做到这一点这必须通过Win32完成谢谢 最佳答案 您可以使用IndexingService为此,但我建议您在使用FindFirstFile时自己处理排序。无法使用FindFirstFileWin32API进行排序。有稍微高级一点的FindFirstFileEx,但即使这样也不允许排序。有个陈峰postonTheOldNewThingaboutFindFirstFile'slim

c++ - 标准库中有哪些函数可以通过编程技巧更快地实现?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestion我最近读了anarticle关于快速sqrt计算。因此,我决定请SO社区及其专家帮助我找出哪些STL算法或数学计算可以通过编程hack更快地实现?如果您能提供示例或链接,那就太好了。提前致谢。

c++ - "not, and, or, not_eq.."是 C++ 标准的一部分吗? (以及为什么可以在代码中使用或避免使用它们?)

所以它看起来像所有这些:http://www.cplusplus.com/reference/clibrary/ciso646/是c++中的关键字。我的问题是。这是c++标准的一部分吗?我可以依赖主要编译器的支持吗?我知道gcc确实支持这些关键字。最后,也许这更像是一个偏好或风格问题,但与标准运算符(!、!=、&&...等)相比,使用关键字是否有任何优势? 最佳答案 Myquestionis.Isthisapartofthec++standard?是的。CanIrelyonthistobesupportedbymajorcompil