问题标签 [c++-standard-library]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
153833 浏览

c++ - string::npos 在这段代码中是什么意思?

std::string::npos以下代码片段中的短语是什么意思?

0 投票
4 回答
3083 浏览

c++ - 了解 std::istream::read 的设计

std::istream有原型应该通过调用得到实际读取的字节数istream& read (char* s, streamsize n)可以从中知道istream::gcount()其有效性。istreamios::good

我正在与我的一位同事讨论我试图编写的另一个流类的实现,我说我可能会遵循这个设计;但他说,与其让用户每次都调用gcount,不如像这样读取原型istream& read (char* s, streamsize n, size_t &bytes_read),这样它就可以在一次调用中结束,而前者更笨拙。我无法为std的设计选择辩护。背后的真正原因是istream::read什么?

0 投票
4 回答
14441 浏览

c++ - 这是 C++“移动”语义的正确用法吗?

今晚我一直在看一些我过去几天一直在处理的代码,并开始阅读移动语义,特别是 std::move。我有几个问题要问你们专业人士,以确保我走在正确的道路上,而不是做出任何愚蠢的假设!

首先:

1)最初,我的代码有一个返回大向量的函数:

鉴于“theVector”在此是临时的并且“丢弃”,我将函数修改为:

这个对吗?这样做有什么陷阱吗?

2)我注意到我有一个函数返回std::string它自动调用移动构造函数。调试到返回字符串(谢谢,Aragorn),我注意到它称为显式移动构造函数。为什么有一个字符串类而不是向量?

我无需对此函数进行任何修改即可利用移动语义:

3)最后,我想做一些性能测试,是因为 std::move 语义而得到的惊人的快速结果还是我的编译器(VS2010)也做了一些优化?

_getMilliseconds()为简洁起见省略的实现)

结果显然很棒。result1 是一个标准作业,耗时 630 毫秒。第二个结果是 0ms。这是对这些东西的良好性能测试吗?

我知道其中一些对你们很多人来说是显而易见的,但我想确保在我对我的代码进行更深入的研究之前了解语义。

提前致谢!

0 投票
3 回答
1612 浏览

c++ - c++ toupper - standard function?

Possible Duplicate:
Convert a String In C++ To Upper Case

Hi, I need a portable function to convert string in c++ to upper case. I'm now using toupper( char); function. Is it a standard function? If not, what it's the correct way to do it across platforms? Btw, is there any web / wiki where I can list all c++ standard functions? Thank you.

0 投票
5 回答
2943 浏览

c++ - Python 标准库的 C/C++ 等效项

对于有用的数据结构和操纵器(例如,和)以及实用程序(例如,,和) ,我都非常依赖Python 的标准库,以跳过样板文件并完成工作。翻阅有关 C++ 标准库的文档,它似乎完全是关于数据结构的,几乎没有 Python 标准库中“包含的电池”的方式。collectionsitertoolsoptparsejsonlogging

Boost 库是我所知道的唯一一个类似于 Python 标准库的开源 C++ 库集合,但是虽然它确实具有正则表达式支持等实用程序库,但其中大部分也专用于数据结构。我真的很惊讶,即使是像保证解析和编写 CSV 文件这样简单的事情,使用Pythoncsv模块变得非常简单,看起来也需要在 C++ 中自行滚动(即使您利用 Boost 的一些解析库)。

是否还有其他提供“电池”的 C++ 开源库?如果没有,作为 C++ 程序员,你会做什么:寻找单独的实用程序库(如果是,如何),或者只是自己开发(这看起来很烦人且浪费)?

0 投票
2 回答
27048 浏览

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

我不确定是我不理解还是文档没有明确制定。

以下摘自最新草案(N3126,第 29.6 节):

备注:weak compare-and-exchange操作可能会虚假失败,即返回false,而操作前expect指向的内存内容与object相同,after与expected相同操作。[注意:这种虚假故障使得能够在更广泛的机器类别上实现比较和交换,例如负载锁定存储条件机器。虚假失败的结果是几乎所有弱比较和交换的使用都将处于循环中。

那么这是什么意思?

首先,它“可能”虚假失败?!为什么会失败?他们如何定义“可能”?

其次,我仍然不知道带有“_strong”和“_weak”后缀的函数有什么区别。有人可以解释其中的区别吗?

编辑: 这就是我在 libstdc++-implementation (atomic_0.h) 中发现的:

0 投票
3 回答
30288 浏览

c++ - 如何让 IOStream 表现更好?

大多数学习 C 的 C++ 用户更喜欢使用printf/scanf系列函数,即使他们使用 C++ 进行编码也是如此。

虽然我承认我发现界面方式更好(尤其是类似 POSIX 的格式和本地化),但似乎压倒性的问题是性能。

看看这个问题:

如何加快逐行读取文件的速度

似乎最好的答案是使用fscanf,并且 C++ifstream始终慢 2-3 倍。

我认为如果我们可以编译一个“技巧”存储库来提高 IOStreams 的性能,那会很棒,什么有效,什么无效。

需要考虑的要点

  • 缓冲 ( rdbuf()->pubsetbuf(buffer, size))
  • 同步 ( std::ios_base::sync_with_stdio)
  • 语言环境处理(我们可以使用精简的语言环境,还是完全删除它?)

当然,也欢迎其他方法。

注意:提到了 Dietmar Kuhl 的“新”实现,但我无法找到有关它的许多细节。以前的引用似乎是死链接。

0 投票
7 回答
104575 浏览

c++ - “STL”和“C++ 标准库”有什么区别?

有人提请我注意这篇文章,声称(我在解释) STL 术语被滥用来指代整个 C++ 标准库,而不是取自 SGI STL 的部分。

(...) 它指的是“STL”,尽管事实上很少有人仍在使用 STL(它是在 SGI 设计的)。

C++ 标准库的一部分是基于 STL 的一部分,许多人(包括几位作者和臭名昭著的错误缠身的 cplusplus.com)仍然将这些部分称为“STL”。但是,这是不准确的;确实,C++标准从来没有提到过“STL”,两者在内容上也有区别。

(...) “STL”很少用于指恰好基于 SGI STL 的 stdlib 位。人们认为它是整个标准库。它被放在简历上。它具有误导性。

我对 C++ 的历史几乎一无所知,所以我无法判断这篇文章的正确性。我应该避免使用术语 STL 吗?或者这是一个孤立的观点?

0 投票
3 回答
28011 浏览

c++ - 使用默认构造函数初始化 std::vector

我有一个类字段,它是一个 std::vector。我知道我希望这个向量包含多少个元素:N。如何用 N 个元素初始化向量?

0 投票
2 回答
17761 浏览

c++ - 为什么标准 C++ 库全部使用小写?

只是好奇为什么 C++ 标准库使用所有小写和下划线而不是camelCase命名PascalCase约定。

就我个人而言,我发现在输入代码时后者更容易处理,但是使用前者有什么正当理由吗?