c++-standard-library相关内容

为什么C++标准文件流不能更严格地遵循RAII约定?

为什么C++标准库流使用与对象生存期分离的open()/close()语义?从技术上讲,关闭销毁可能仍然会使类成为RAII类,但获取/释放独立性会在作用域中留下漏洞,其中句柄可以什么都不指向,但仍然需要运行时检查才能捕获。 为什么库设计者选择他们的方法,而不是只在引发失败的构造函数中打开? void foo() { std::ofstream ofs; ofs ..
发布时间:2022-09-05 16:52:06 C/C++开发

Std::向量和指针可预测性

当您将push_back()项转换为std::vector并通过back()引用保留指向向量中对象的指针时--您是否保证(假设不发生删除)向量中对象的地址将保持不变? 我的向量似乎更改了我使用的对象的指针,因此如果我将10个项目放入其中,并通过记住每个push_back后的back()引用来保留指向这10个项目的指针。 如果您的向量要存储对象,而不是指向对象的指针,则这些对象的地址是否 ..
发布时间:2022-08-23 13:01:35 C/C++开发

STD::BIT_CAST和STD::START_LIFEST_AS之间有什么有用的区别吗?

std::bit_cast显然是在c++20中引入的。而std::start_lifetime_as是在c++23中建议的(来自P0593R5)。由于它们似乎都要求所涉及的数据类型无论如何都是微不足道的,那么一旦引入后者,还需要前者吗? 对于没有提供有关这些新功能的更多信息,提前表示歉意。我是在看了cppcon 2019关于打字双关语的讲座后才听说他们的,而且我在Google上找不到太多关于 ..
发布时间:2022-05-17 09:15:03 C/C++开发

Stephen Lavavej 的 Mallocator 在 C++11 中是否相同?

8 年前,Stephen Lavavej 发表了这篇博文,其中包含简单的分配器实现,命名为“Mallocator".从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关? 解决方案 STL 自己在他的 STL 中有这个问题的答案特性和实现技术在 CppCon 2014 上的演讲(开始于 26'30). ..
发布时间:2022-01-24 21:07:28 C/C++开发

std::queue 迭代

我需要遍历 std::queue.www.cplusplus.com 说: 默认情况下,如果没有为特定队列类指定容器类,则使用标准容器类模板双端队列. 那么我能否以某种方式访问​​队列的底层双端队列并对其进行迭代? 解决方案 如果您需要遍历 queue,那么您需要的不仅仅是队列.标准容器适配器的重点是提供最小接口.如果您还需要进行迭代,为什么不直接使用双端队列(或列表)呢? ..
发布时间:2022-01-21 11:28:44 C/C++开发

C++ 标准库是否有按插入顺序排序的集合?

C++ 标准库是否有“有序集"数据结构?所谓有序集,我的意思是与普通的 std::set 完全相同,但它会记住您将项目添加到其中的顺序. 如果不是,模拟一个的最佳方法是什么?我知道你可以做一些事情,比如有一组对,每对存储它添加的数字和实际值,但如果有更简单的解决方案,我不想跳过箍. 解决方案 没有一个单一的、同质的数据结构会具有这个属性,因为它要么是顺序的(即元素按插入顺序排列)要么 ..
发布时间:2022-01-17 18:51:21 C/C++开发

std::string 格式化,如 sprintf

我必须用 std::string 格式化="http://en.cppreference.com/w/cpp/io/c/fprintf">sprintf 并将其发送到文件流中.我该怎么做? 解决方案 你不能直接这样做,因为你没有对底层缓冲区的写访问权(直到 C++11;参见 Dietrich Epp 的 评论).您必须先在 c-string 中执行此操作,然后将其复制到 std::stri ..
发布时间:2022-01-12 08:45:54 C/C++开发

GCC 链接器找不到标准库?

我一直在用 XCode 开发一个学校项目.最终产品必须以源代码和 makefile 的形式提交,所以我编写了一个 makefile 并开始编译,以确保我有一个工作副本.这是我的生成文件: all: main.o StackList.o world.o Farm.ogcc main.o StackList.o world.o Farm.o -g -o Project1主.o:gcc -g -c m ..
发布时间:2022-01-11 14:56:07 C/C++开发

如果向量有足够的空间(通过保留创建),std::vector::insert() 是否会使迭代器无效?

回答 如何自行复制向量? 让我明白了对迭代器失效有点困惑.一些文献说“如果您使用 insert、push_back 等,请考虑所有迭代器无效".很明显,它可能会导致向量增长,从而使迭代器无效.我知道会有足够空间的特殊情况呢? 第一次尝试: myvec.reserve(myvec.size()*3);//这能保护我免受迭代器失效吗?向量::iterator it = myvec.e ..
发布时间:2022-01-10 14:37:37 C/C++开发

C++ valarray 与向量

我非常喜欢矢量.它们既漂亮又快速.但我知道这个叫做 valarray 的东西是存在的.为什么我要使用 valarray 而不是向量?我知道 valarrays 有一些语法糖,但除此之外,它们什么时候有用? 解决方案 Valarrays(值数组)旨在将 Fortran 的某些速度带到 C++.您不会创建一个 valarray 指针,因此编译器可以对代码做出假设并更好地优化它.(Fortran ..
发布时间:2022-01-07 11:02:18 C/C++开发

编写自己的 STL 容器

是否有关于如何编写与任何 STL 容器类似的新容器的指南? 解决方案 这是我从 § 23.2.1\4 拼凑而成的序列伪容器 注意 iterator_category 应该是 std::input_iterator_tag、std::output_iterator_tag、std::forward_iterator_tag、std::bidirectional_iterator_tag、st ..
发布时间:2022-01-07 10:50:46 C/C++开发

g++ 4.7.2 中缺少 std::stoi 吗?

当我尝试使用 std::stoi 并尝试编译它时,我收到错误消息“stoi 不是 std 的成员".我正在从命令行使用 g++ 4.7.2,所以它不会是 IDE 错误,我按顺序排列了所有包含,并且 g++4.7.2 默认使用 c++11.如果有帮助,我的操作系统是 Ubuntu 12.10.有什么我没有配置的吗? #include #include 使用命名空间标准;int main(){字符串 ..
发布时间:2021-12-31 22:39:00 C/C++开发

没有<可选>在 MS Visual Studio 2013 中 - 该怎么做?

我想使用 std::experimental::optional,但 MSVS 2013 告诉我它找不到标题. 为什么它不在那里? 我可以根据其他地方的代码推出自己的代码吗?也许是 C++14 提案? 解决方案 std::experimental::optional 源自 Boost.Optional 库,该实现在 Visual C++ 12.0 中运行良好(尽管它有所不同 一点) ..

C2676:二进制“<":“const _Ty"未定义此运算符或转换为预定义运算符可接受的类型

对于下面的代码,我不断收到此错误. 在阅读this后,我相信我的错误是成为 for 循环中的 it++,我尝试将其替换为 next(it, 1) 但它没有解决我的问题. 我的问题是,迭代器是给我带来问题的那个吗? #include #include #include #include 使用命名空间标准;结构节点{字符顶点;设置邻近的;};类图{上市:图(){};〜图(){};void ..
发布时间:2021-12-24 14:43:13 C/C++开发

如果向量有足够的空间(通过保留创建),std::vector::insert() 是否会使迭代器失效?

回答如何自我复制向量?让我明白对迭代器失效有点困惑.一些文献说“如果您使用 insert、push_back 等,请考虑所有迭代器无效".很明显,它可能会导致向量增长,从而使迭代器无效.如果我知道有足够的空间,那么特殊情况呢? 第一次尝试: myvec.reserve(myvec.size()*3);//这是否可以保护我免受迭代器失效的影响?vector::iterator it = my ..
发布时间:2021-12-21 13:47:54 C/C++开发

如何使用 std::valarray 存储/操作连续的二维数组?

如何使用 std::valarray 来存储/操作二维数组? 我想看一个二维数组示例,其中元素通过行/列索引访问.像这样的伪代码: matrix(i,j) = 42; 一个如何初始化这样一个数组的例子也很好. 我已经知道 Boost.MultiArray、Boost.uBlas 和 Blitz++. 请随意回答为什么我不应该在我的用例中使用 valarray.但是,我希望多维 ..
发布时间:2021-12-21 13:00:28 C/C++开发