Questions tagged «c++»

C ++是一种通用编程语言。它最初被设计为C的扩展,并且具有类似的语法,但是现在它是一种完全不同的语言。使用此标记可解决有关将要使用C ++编译器编译的代码的问题。对于与特定标准修订版[C ++ 11],[C ++ 14],[C ++ 17]或[C ++ 20]等相关的问题,请使用特定于版本的标记。

26
为什么处理排序数组比处理未排序数组快?
Наэтотвопросестьответына 堆栈溢出нарусском:Почемуотсортированныймассивобрабатываетсябыстрее,чемнеотсортированный? 这是一段C ++代码,显示了一些非常特殊的行为。出于某些奇怪的原因,奇迹般地对数据进行排序使代码快了将近六倍: #include <algorithm> #include <ctime> #include <iostream> int main() { // Generate data const unsigned arraySize = 32768; int data[arraySize]; for (unsigned c = 0; c < arraySize; ++c) data[c] = std::rand() % 256; // !!! With this, the next loop runs faster. std::sort(data, data + arraySize); …

22
什么是C ++中的“->”运算符?
Наэтотвопросестьответына 堆栈溢出нарусском:Чтотакоеоператор “ - >” вС++? 看完后隐藏的功能和C ++ / STL的暗角上comp.lang.c++.moderated,我完全意外的是,下面的代码片断编译并在两个Visual Studio 2008和G ++ 4.4的工作。 这是代码: #include <stdio.h> int main() { int x = 10; while (x --> 0) // x goes to 0 { printf("%d ", x); } } 输出: 9 8 7 6 5 4 3 2 1 0 …

1
权威的C ++书籍指南和清单
这个问题的答案是社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 Наэтотвопросестьответына 堆栈溢出нарусском:КнигииучебныересурсыпоС++ 这个问题试图收集每年出版的数十本不良C ++书籍中的珍珠。 与许多其他编程语言不同,这些语言通常是在Internet上的教程中经常使用的,而没有学习一本写得很好的C ++书籍的人很少能够快速使用C ++。这样做太大,太复杂。实际上,它是如此之大和复杂,以至于有很多非常糟糕的C ++书籍。我们不是在谈论不良风格,而是诸如炫耀明显的事实错误和推广极差的不良编程风格之类的事情。 请编辑接受的答案,以提供优质的书籍和大致的技能水平- 最好 在 C ++聊天室中讨论添加内容之后。(如果常规员工不同意建议,他们可能会毫不留情地撤消您的工作。)为您亲自阅读/受益的每本书添加简短的简介/说明。随意讨论质量,标题等。符合条件的书籍将添加到列表中。具有C和C ++用户协会(ACCU)的评论的书籍具有该评论的链接。 *注意:常见问题解答和其他资源可以在C ++标签信息中和下面找到C ++常见问题。
4243 c++  c++-faq 


30
如何遍历字符串中的单词?
我正在尝试遍历字符串中的单词。 可以假定字符串由空格分隔的单词组成。 请注意,我对C字符串函数或那种字符操作/访问不感兴趣。另外,在回答问题时,请优先考虑优雅而不是效率。 我目前拥有的最佳解决方案是: #include <iostream> #include <sstream> #include <string> using namespace std; int main() { string s = "Somewhere down the road"; istringstream iss(s); do { string subs; iss >> subs; cout << "Substring: " << subs << endl; } while (iss); } 有没有更优雅的方法可以做到这一点?
2985 c++  string  split 





10
为什么单独循环中的元素加法比组合循环中的要快得多?
假设a1,b1,c1,并d1指向堆内存和我的数字代码具有下列核心循环。 const int n = 100000; for (int j = 0; j < n; j++) { a1[j] += b1[j]; c1[j] += d1[j]; } 该循环通过另一个外部for循环执行了10,000次。为了加快速度,我将代码更改为: for (int j = 0; j < n; j++) { a1[j] += b1[j]; } for (int j = 0; j < n; j++) { c1[j] += …


7
运算符重载的基本规则和惯用法是什么?
注意:答案是按照特定顺序给出的,但是由于许多用户是根据投票而不是给出时间来对答案进行排序的,因此以下是最有意义的顺序的索引: C ++中运算符重载的通用语法 C ++中运算符重载的三个基本规则 会员与非会员之间的决定 普通运算符重载 赋值运算符 输入和输出运算符 函数调用运算符 比较运算符 算术运算符 数组下标 指针类型的运算符 转换运算符 重载新的和删除的 (注意:这本来是Stack Overflow的C ++ FAQ的一个条目。如果您想批评以这种形式提供FAQ的想法,那么开始所有这些工作的meta上的发布将是这样做的地方。该问题在C ++聊天室中进行监控,该问题最初是从FAQ想法开始的,所以提出这个想法的人很可能会读懂您的答案。)

5
什么是复制和交换习语?
这个习语是什么,什么时候应该使用?它可以解决哪些问题?使用C ++ 11时,习惯用法会改变吗? 尽管在很多地方都提到过它,但是我们没有任何奇异的“这是什么”的问题和答案,所以就在这里。这是先前提到的地方的部分列表: 您最喜欢的C ++编码样式惯用法是什么:复制交换 在C ++中复制构造函数和=运算符重载:是否可能使用通用函数? 什么是复制省略及其如何优化复制和交换习惯 C ++:动态分配对象数组?

8
C ++ 11引入了标准化的内存模型。这是什么意思?它将如何影响C ++编程?
C ++ 11引入了标准化的内存模型,但这究竟意味着什么?它将如何影响C ++编程? 这篇文章(由加文·克拉克(Gavin Clarke)引用赫伯·萨特(Herb Sutter)表示)说, 内存模型意味着C ++代码现在有一个标准化的库可以调用,而不管编译器的创建者和运行平台是什么。有一种标准方法可以控制不同线程如何与处理器的内存通信。 “当你在谈论分裂[代码]在不同的内核,就是在标准,我们正在谈论的内存模型。我们要优化它没有打破以下假设人会在代码中做出,” 萨特说。 好吧,我可以记住这一段以及网上可以找到的类似段落(因为我从出生就拥有自己的记忆模型:P),甚至可以发布它作为对其他人提出的问题的答案,但是老实说,我并不完全理解这个。 C ++程序员甚至以前都曾开发过多线程应用程序,那么,它是POSIX线程,Windows线程还是C ++ 11线程又有什么关系呢?有什么好处?我想了解底层细节。 我还感觉到C ++ 11内存模型与C ++ 11多线程支持某种程度上相关,因为我经常将两者结合在一起。如果是的话,究竟如何?为什么要关联它们? 由于我不了解多线程的内部原理以及内存模型的一般含义,请帮助我理解这些概念。:-)

10
为什么在C ++中从stdin读取行比Python慢​​得多?
我想比较使用Python和C ++从stdin读取的字符串输入的行数,并且震惊地看到我的C ++代码运行速度比等效的Python代码慢一个数量级。由于我的C ++生锈,而且我还不是专家Pythonista,因此请告诉我我做错了什么还是误解了什么。 (TLDR回答:包括以下声明:cin.sync_with_stdio(false)或仅使用fgets代替。 TLDR结果:一直滚动到我的问题的底部,然后查看表格。) C ++代码: #include <iostream> #include <time.h> using namespace std; int main() { string input_line; long line_count = 0; time_t start = time(NULL); int sec; int lps; while (cin) { getline(cin, input_line); if (!cin.eof()) line_count++; }; sec = (int) time(NULL) - start; cerr << "Read …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.