问题标签 [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.
c++ - *iterator 导致段错误
我正在尝试浏览列表。以下是一些声明:
有时,此代码在第 2 行出现段错误:
是否有任何常见原因导致这可能导致段错误?
c++ - unordered_map 禁止碰撞
我想实现一个性能优化的变体,unordered_map
它分几个阶段工作:
- 初始化:插入大约 100 个元素
std::map
- 准备:做一些魔法,转换
std::map
成一个变种std::unordered_map
- 工作:执行大量(无限)查找;禁止插入/删除
为了使“工作”阶段尽可能快,我想选择一个对给定键集没有冲突的散列函数(在初始化阶段收集)。
我想衡量我可以从这个技巧中获得多少性能改进。所以这将是一个实验,可能会进入生产代码。
标准库是否有实现此功能的工具(例如,查找给定的碰撞次数unordered_map
;或更改散列函数)?还是我应该自己实现?
c++ - 为什么从 C++11 中删除了 std::pow(double, int)?
在研究计算 p^q(求幂)的有效方法时,其中 q 是一个整数并查看 C++98 和 C++11 标准,我注意到显然std::pow(double, int)
在 C++11 中删除了重载。
在 C++98 26.5/6 中,它具有double pow(double, int);
签名。
在 C++11 26.8 中,我只能找到采用一对 , 或 , 的重载float
,double
并long double
明确指出,如果参数类型为 integer&double 的混合,pow(double, double)
则应选择重载。
这只是对先前意图的澄清,它们是在 C++98 中错误地添加的,是在 C++11 中实际删除的,还是其他什么?
显然,该pow(double, int)
版本提供了一个很好的优化机会,因此将它们删除似乎很奇怪。编译器仍然是符合提供这种优化重载的标准吗?
c++ - 在标准命名空间中声明名称的坏习惯?
我正在浏览Google C++ style guide,发现了这个:
“不要在命名空间 std 中声明任何东西,甚至不要前向声明标准库类。在命名空间 std 中声明实体是未定义的行为,即不可移植。要从标准库声明实体,请包含适当的头文件。”
有人可以使用示例代码解释这意味着什么以及为什么这是未定义的行为吗?
c++ - 我使用 C++ 标准库的 find 有什么问题?
我正在尝试find
像这样使用 C++ 标准库的算法:
当我尝试编译时,出现以下错误:
我觉得“从属名称'std :: vector :: iterator'被解析为非类型,但实例化产生类型”位是理解我做错了什么的关键,但我的豌豆大脑不能提取意义。
更新:我需要根据typename
接受的答案添加 a ,并且还使用 a const_iterator
,因此有问题的代码行变为:
c++ - 得到“调试断言失败!” 用于设置比较器
我知道这个链接已经回答了类似的问题帮助我修复这个 C++ std::set 比较器 ,但不幸的是我面临着完全相同的问题,我无法理解它背后的原因,因此需要一些帮助来解决它。
我正在使用 VS2010,我的发布二进制文件运行良好,没有任何问题,但调试二进制文件报告:
我的比较器看起来像这样:
我的集合是这样声明的:
有人可以建议我为什么我的调试二进制文件在这个断言上失败了吗?是因为我使用 wcscmp() 函数来比较存储在我的集合中的宽字符串吗?
提前致谢!!!
c++ - 与 setw() 有什么关系?
我最近被这样一个事实所困扰,ios_base::width
和/或必须在每个写入流的项目时重置setw
操纵器。
也就是说,您必须这样做:
而不是这样:
好的。
但是有谁知道为什么做出这个设计决定?我是否缺少一些理由,或者这只是标准的一个黑暗角落?
其他流格式修饰符(如链接的 SO 问题中所述)是“粘性的”,而setw
不是。
c++ - 为什么会出现向量的链接器错误?
我有作业要写我自己的抽象类 Vector。我做了一些代码,但是当我尝试编译它时出现错误。这是代码:
矢量.hh:
矢量.cc:
主.cc:
错误是:
g++ -c -o main.o main.cc
g++ -Wall -g vector.o main.o -o hw02vector
main.o:在函数中'main'
: main.cc:(.text+
0x37):对collect2的未定义引用'Vector<int>::push_back(int const&)'
:ld返回1 退出状态
make: * [hw02vector] 错误 1
c++ - C++ std::ifstream 读取到字符串分隔符
使用时:
字符串可以包含哪些字符,哪些字符将停止读取字符串。
c++11 - C++0x 使用为了更安全的长度类型
在阅读时<ratio>
,<chrono>
我试图想象一种Length
可以防止意外转换错误的类型。
这就是我得到的:
像这样使用
现在我可以添加所有+
和*
操作来变得非常舒服...... :-)
我想知道:
- 是否有更容易访问
duration
和time_point
定义的算术设施<chrono>
?我可以用那些减少努力Length
吗? - 编译时常
(Scale2::num*Scale::den)/(Scale2::den*Scale::num)
量在转换构造函数中似乎很危险(分数/下溢?),但我想不出更好的元编程方式,这里有什么提示吗?