std相关内容

我应该在 C++ 中使用 std::function 还是函数指针?

在C++中实现回调函数时,我是否还应该使用C风格的函数指针: void (*callbackFunc)(int); 或者我应该使用 std::function: std::function回调函数; 解决方案 简而言之,除非有理由不使用,否则请使用 std::function. 函数指针的缺点是不能捕获某些上下文.例如,您将无法将 lambda 函数作为捕获某些上下文变量的回调传递 ..
发布时间:2021-12-07 23:04:57 C/C++开发

为什么从`std::async` 阻塞返回未来的析构函数?

当试图回答另一个 Stackoverflow 问题,我意识到这个简单的 C++11 代码段隐式地阻塞了调用线程: std::async(std::launch::async, run_async_task) 对我来说,这似乎是规范的 C++11 异步启动任务而不关心结果的方式.相反,为了实现这一点,必须明显地创建和分离一个线程(参见 answer 提到的问题).> 所以这是我的问题:std: ..
发布时间:2021-12-06 11:36:28 C/C++开发

将 std::__cxx11::string 转换为 std::string

我用的是c++11,但也有一些库没有为它配置,需要一些类型转换.特别是我需要一种将 std::__cxx11::string 转换为常规 std::string 的方法,但是谷歌搜索我找不到这样做的方法并把前面的(string)不起作用. 如果我不转换,我会收到这样的链接器错误: 未定义引用`H5::CompType::insertMember(std::__cxx11::basic_st ..
发布时间:2021-12-05 14:54:45 C/C++开发

如何确定一个项目是否存在于 std::vector 中?

我要做的就是检查向量中是否存在某个元素,以便我可以处理每种情况. if ( item_present )做这个();别的去做(); 解决方案 您可以使用 std::find from : #include #include 向量vec;//可以有其他数据类型而不是int但必须与项目相同的数据类型std::find(vec.begin(), vec.end(), item) != vec.e ..
发布时间:2021-12-01 15:31:06 C/C++开发

用另一个字符串替换部分字符串

在 C++ 中是否可以用另一个字符串替换部分字符串? 基本上,我想这样做: QString string("hello $name");string.replace("$name", "Somename"); 但我想使用标准 C++ 库. 解决方案 有一个函数可以在字符串中查找子字符串 (find),以及用另一个字符串替换字符串中特定范围的函数(replace),因此您可以将它们 ..
发布时间:2021-12-01 15:21:56 C/C++开发

“STL"和“STL"有什么区别?和“C++ 标准库"?

有人带来了这篇文章 我注意到声称​​(我在意译) STL 术语被误用于指代整个 C++ 标准库,而不是取自 SGI STL 的部分. (...) 它指的是“STL",尽管事实上很少有人仍然使用 STL(它是在 SGI 设计的). C++ 标准库的部分内容基于 STL 的部分内容,正是这些部分被许多人(包括几位作者和臭名昭著的错误缠身的 cplusplus.com)称为“STL".然而, ..
发布时间:2021-12-01 14:58:07 C/C++开发

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

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

在 for(-each) 自动循环中擦除项目

在像这样的 for 循环中使用自动变量时,有没有办法擦除特定元素? for(auto a: m_Connections){如果(某事){//删除这个元素}} 我知道我可以说 for(auto it=m_map.begin() ... 或 for(map::iterator it=m_map.begin() ... 并手动增加迭代器(和擦除),但如果我能用更少的代码行来做到这一点,我会更 ..
发布时间:2021-11-30 18:15:25 C/C++开发

std::assert 发生了什么

这个答案和大量重复表明我应该使用 #include 对于我从 C++ 代码中提取的 C 头文件,我应该用 std::* 调用它们. 我一直在这样做,但我注意到一个例外.std::assert 似乎没有被定义,即使我正确地#include . 这是怎么回事?这是实施疏忽,还是实际例外? 解决方案 assert 是一个宏,而不是一个函数.因此,它需要与普通的旧 asser ..
发布时间:2021-11-30 11:24:13 C/C++开发

如何为 7z 存档格式编写二进制数据?

我一直在倾注 7z 存档格式的格式描述和源代码,但我仍然无法编写有效的容器.我假设我可以创建一个空容器......无论如何这是我的开始: std::ofstream ofs(archivename.c_str(), std::ios::binary|std::ios::trunc);字节签名[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};字节主要 = 0;次要字 ..
发布时间:2021-11-26 15:16:08 C/C++开发

如何为 7z 存档格式编写二进制数据?

我一直在倾注 7z 存档格式的格式描述和源代码,但我仍然无法编写有效的容器.我假设我可以创建一个空容器......无论如何这是我的开始: std::ofstream ofs(archivename.c_str(), std::ios::binary|std::ios::trunc);字节签名[6] = {'7', 'z', 0xBC, 0xAF, 0x27, 0x1C};字节主要 = 0;次要字 ..
发布时间:2021-11-25 07:57:07 C/C++开发

Linux CLion 无法解析命名空间成员

#include #include int main(){std::srand(时间(0));返回0;} 错误信息 此代码编译并运行良好.但是错误消息并没有消失,这让我很恼火.也许有人解决了这个问题. 我的系统信息. Linux 桌面 4.6.4-1-ARCH #1 SMP PREEMPT Mon Jul 11​​ 19:12:32 CEST 2016 x86_64 GNU/Lin ..
发布时间:2021-11-17 03:25:08 服务器开发

将向量附加到向量的最佳方法

std::vector一种;std::vector乙;std::vectorC; 我想通过将 b 和 c 的元素附加到 a 来连接这三个向量.哪种方法最好,为什么? 1) 通过使用 vector::insert: a.reserve(a.size() + b.size() + c.size());a.insert(a.end(), b.begin(), b.end());a.insert ..
发布时间:2021-11-16 19:32:32 C/C++开发

如何用 std::is_same 替换 std::is_same_v

我有这个包含 std::is_same_v 的代码可用于 C++17.但由于工具链的限制,我一直坚持使用 C++14. template使用 IteratorOnly = std::enable_if_t, O>; 如何将 std::is_same_v 替换为 std::is_same?是否有任何解决方法可以仅使用 C++1 ..
发布时间:2021-08-30 18:59:56 C/C++开发

以结构为键的 std::map

我尝试使用 std::map 的键作为 Struct,但在找到键时失败.这里有什么问题?查找未找到但插入不会更改地图中的计数..... #pragma once#include 结构 OccTestdef{民众:整数类型;整数长度;OccTestdef(int typ, int length) :Typ(typ), Length(length) {};布尔运算符测试图;typedef std:: ..
发布时间:2021-08-30 18:59:49 C/C++开发