std相关内容

C++ 什么时候可以扩展 `std` 命名空间?

SO 上的一个帖子说 扩展 std 是 UB (好吧,除非你当然是标准的作家).但有时,std 会被愉快地扩展.什么时候可以这样做? 解决方案 唯一可以将定义添加到 std 命名空间的情况是对已存在于命名空间中的模板进行特化并显式实例化模板.但是,仅当它们依赖于用户定义的类型时. [namespace.std](标准草案): 如果 C++ 程序将声明或定义添加到命名空间 std ..
发布时间:2022-01-14 23:11:49 C/C++开发

“使用命名空间标准"有什么用?

using namespace std有什么用? 我希望看到通俗易懂的解释. 解决方案 使用:您将使用它. 命名空间:使用什么?命名空间. std:std 命名空间(C++ 标准库的特性,例如 string 或 vector, 被声明). 写完这条指令后,如果编译器看到string,它就会知道你可能指的是std::string,如果它看到vector,它会知道你可能指的是s ..
发布时间:2022-01-14 23:07:51 C/C++开发

printf 与 std::string?

我的理解是string是std命名空间的成员,那么为什么会出现以下情况呢? #include 主函数(){使用命名空间标准;string myString = "按 ENTER 退出程序!";cout 如果由于某种原因需要提取 C 风格的字符串,可以使用 std::string 的 c_str() 方法获取 const char *.使用您的示例: #include ..
发布时间:2022-01-14 22:48:27 C/C++开发

为什么是“使用命名空间标准"?被认为是不好的做法?

其他人告诉我,在代码中编写 using namespace std; 是错误的,我应该使用 std::cout 和 std::cin 直接代替. 为什么 using namespace std; 被认为是一种不好的做法?它是效率低下还是有声明不明确变量的风险(与 std 命名空间中的函数具有相同名称的变量)?它会影响性能吗? 解决方案 这与性能完全无关.但是考虑一下:您正在使用两个名 ..
发布时间:2022-01-14 22:45:13 C/C++开发

使用 std::string 构造函数复制 const char *

这段代码可以吗? void SomeClass :: foo(const char * _name) {//名称的类型为 const char *名称 = std::string(_name).c_str();} 看起来它正在工作,但我不确定它是否正常 我应该做一个老式的 strcpy 吗? 解决方案 没关系,因为它可以编译并且不会导致未定义的行为. 不没问题,因为 nam ..
发布时间:2022-01-12 20:55:45 C/C++开发

std 函数 std::_Rb_tree_rebalance_for_erase () 中的分段错误

(任何未来的读者请注意:毫无疑问,错误在我的代码中,而不是 std::_Rb_tree_rebalance_for_erase () ) 我对编程有点陌生,不确定如何处理似乎来自 std 函数的分段错误.我希望我在做一些愚蠢的事情(即滥用容器),因为我不知道如何解决它. 准确的误差是 程序收到信号EXC_BAD_ACCESS,无法访问内存. 原因:KERN_INVALID_AD ..
发布时间:2022-01-12 16:21:39 C/C++开发

使用命名空间标准

我在学校上编程课,我想在课外开始做一些 c++ 编程.我的学校使用 Microsoft Visual C++ 6.0(从 1998 年开始),所以它仍然使用 而不是 和 using namespace std.当我开始工作时,我不知道如何以及何时使用 using namespace std 以及何时只使用诸如 std::cout ..
发布时间:2022-01-11 16:39:37 C/C++开发

获取迭代器范围的每个第 n 个元素

是否有任何标准实现(意味着 stdlib 或 boost)的迭代器包装另一个迭代器并只给出它的每个第 n 个元素? 我最初认为这可以通过合适的谓词和 boost::filter_iterator 来实现,但是谓词只获取值而不是基迭代器,因此它无法判断到开始的距离. 编辑 提供更多信息:迭代器应该与 std::transform 或 std::copy 等函数兼容.所以它应该像 std ..
发布时间:2022-01-10 15:06:07 C/C++开发

std::ofstream,写入前检查文件是否存在

我正在使用 C++ 在 Qt 应用程序中实现文件保存功能. 我正在寻找一种方法来检查所选文件是否在写入之前已经存在,以便我可以向用户提示警告. 我正在使用 std::ofstream 并且我不是在寻找 Boost 解决方案. 解决方案 这是我最喜欢的隐藏功能之一,我手头有很多用途. #include //功能:文件存在/**检查文件是否存在@param[in] filenam ..
发布时间:2022-01-07 19:53:22 C/C++开发

迭代 std::set/std::map 的时间复杂度是多少?

遍历 std::set/std::multiset/std::map/ 的时间复杂度是多少std::multimap?我相信它在集合/地图的大小上是线性的,但不太确定.语言标准里有规定吗? 解决方案 在 草案 C++11 标准 N3337 答案可以在 § 24.2.1 第 8 段中找到: 所有类别的迭代器只需要那些可在固定时间内实现给定类别(摊销). 由于对迭代器的每次操作都必 ..
发布时间:2022-01-07 11:26:14 C/C++开发

C++ std::set 线程安全吗?

我有一个关于 std::set 线程安全的问题. 据我所知,我可以迭代一个集合并添加/删除成员,这不会使迭代器失效. 但请考虑以下场景: 线程'A'遍历一组shared_ptr 线程“B"偶尔会向该集合中添加项目. 我在程序运行时遇到了段错误,但我不确定为什么会发生这种情况.缺乏线程安全是原因吗? 解决方案 STL 没有内置线程支持,所以你必须扩展 STL使用您自 ..
发布时间:2022-01-07 11:09:09 C/C++开发

如何从 STL 容器中擦除元素?

如何从 STL 容器中删除具有指定值或满足某些条件的元素? 对于不同种类的容器,是否有一种通用或统一的方法来做到这一点? 解决方案 不幸的是,没有一个统一界面或模式用于从 STL 容器中擦除元素.但是出现了三种行为: std::vector 模式 要从 std::vector 中删除满足特定条件的元素,一种常用技术是所谓的 erase-remove idiom. 如 ..
发布时间:2022-01-07 11:07:03 C/C++开发

为什么我不能在 C++ 的 `std::map` 中存储引用?

我知道引用不是指针,而是对象的别名.但是,作为程序员,我仍然不明白这对我来说究竟意味着什么,即引擎盖下的引用是什么? 我认为理解这一点的最好方法是理解为什么我不能在地图中存储参考. 我知道我需要停止将引用视为对指针的句法支持,只是不知道如何:/ 解决方案 按照我的理解,引用在幕后实现为指针.不能将它们存储在地图中的原因纯粹是语义;您必须在创建引用时对其进行初始化,之后便无法再更 ..
发布时间:2022-01-05 11:50:36 C/C++开发