c++-standard-library相关内容
为什么C++标准库流使用与对象生存期分离的open()/close()语义?从技术上讲,关闭销毁可能仍然会使类成为RAII类,但获取/释放独立性会在作用域中留下漏洞,其中句柄可以什么都不指向,但仍然需要运行时检查才能捕获。 为什么库设计者选择他们的方法,而不是只在引发失败的构造函数中打开? void foo() { std::ofstream ofs; ofs
..
当您将push_back()项转换为std::vector并通过back()引用保留指向向量中对象的指针时--您是否保证(假设不发生删除)向量中对象的地址将保持不变? 我的向量似乎更改了我使用的对象的指针,因此如果我将10个项目放入其中,并通过记住每个push_back后的back()引用来保留指向这10个项目的指针。 如果您的向量要存储对象,而不是指向对象的指针,则这些对象的地址是否
..
std::bit_cast显然是在c++20中引入的。而std::start_lifetime_as是在c++23中建议的(来自P0593R5)。由于它们似乎都要求所涉及的数据类型无论如何都是微不足道的,那么一旦引入后者,还需要前者吗? 对于没有提供有关这些新功能的更多信息,提前表示歉意。我是在看了cppcon 2019关于打字双关语的讲座后才听说他们的,而且我在Google上找不到太多关于
..
8 年前,Stephen Lavavej 发表了这篇博文,其中包含简单的分配器实现,命名为“Mallocator".从那时起,我们已经过渡到 C++11(以及很快的 C++17)时代......新的语言特性和规则是否会影响 Mallocator,还是仍然相关? 解决方案 STL 自己在他的 STL 中有这个问题的答案特性和实现技术在 CppCon 2014 上的演讲(开始于 26'30).
..
我需要遍历 std::queue.www.cplusplus.com 说: 默认情况下,如果没有为特定队列类指定容器类,则使用标准容器类模板双端队列. 那么我能否以某种方式访问队列的底层双端队列并对其进行迭代? 解决方案 如果您需要遍历 queue,那么您需要的不仅仅是队列.标准容器适配器的重点是提供最小接口.如果您还需要进行迭代,为什么不直接使用双端队列(或列表)呢?
..
..
C++ 标准库是否有“有序集"数据结构?所谓有序集,我的意思是与普通的 std::set 完全相同,但它会记住您将项目添加到其中的顺序. 如果不是,模拟一个的最佳方法是什么?我知道你可以做一些事情,比如有一组对,每对存储它添加的数字和实际值,但如果有更简单的解决方案,我不想跳过箍. 解决方案 没有一个单一的、同质的数据结构会具有这个属性,因为它要么是顺序的(即元素按插入顺序排列)要么
..
我必须用 std::string 格式化="http://en.cppreference.com/w/cpp/io/c/fprintf">sprintf 并将其发送到文件流中.我该怎么做? 解决方案 你不能直接这样做,因为你没有对底层缓冲区的写访问权(直到 C++11;参见 Dietrich Epp 的 评论).您必须先在 c-string 中执行此操作,然后将其复制到 std::stri
..
我一直在用 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
..
我正在玩 android ndk.我正在使用带有 cygwin(最新版本)的 Window Vista.我在手机上编译并启动了 hello world jni 示例.这是工作.代码是(是一个.cpp文件): #include #include 外部“C"{JNIEXPORT jstring JNICALL Java_org_android_helloworld_
..
我正在使用 android NDK r9d 和 toolchain 4.8 但我无法使用 std::to_string 函数,编译器抛出此错误: 错误:“to_string"不是“std"的成员 android ndk 不支持这个功能吗?我尝试 APP_CPPFLAGS := -std=c++11 没有运气. 解决方案 你可以试试LOCAL_CFLAGS := -std=c++11,
..
回答 如何自行复制向量? 让我明白了对迭代器失效有点困惑.一些文献说“如果您使用 insert、push_back 等,请考虑所有迭代器无效".很明显,它可能会导致向量增长,从而使迭代器无效.我知道会有足够空间的特殊情况呢? 第一次尝试: myvec.reserve(myvec.size()*3);//这能保护我免受迭代器失效吗?向量::iterator it = myvec.e
..
我需要检查一组并删除符合预定义条件的元素. 这是我写的测试代码: #include #include 无效打印元素(整数值){std::cout
..
我非常喜欢矢量.它们既漂亮又快速.但我知道这个叫做 valarray 的东西是存在的.为什么我要使用 valarray 而不是向量?我知道 valarrays 有一些语法糖,但除此之外,它们什么时候有用? 解决方案 Valarrays(值数组)旨在将 Fortran 的某些速度带到 C++.您不会创建一个 valarray 指针,因此编译器可以对代码做出假设并更好地优化它.(Fortran
..
是否有关于如何编写与任何 STL 容器类似的新容器的指南? 解决方案 这是我从 § 23.2.1\4 拼凑而成的序列伪容器 注意 iterator_category 应该是 std::input_iterator_tag、std::output_iterator_tag、std::forward_iterator_tag、std::bidirectional_iterator_tag、st
..
当我尝试使用 std::stoi 并尝试编译它时,我收到错误消息“stoi 不是 std 的成员".我正在从命令行使用 g++ 4.7.2,所以它不会是 IDE 错误,我按顺序排列了所有包含,并且 g++4.7.2 默认使用 c++11.如果有帮助,我的操作系统是 Ubuntu 12.10.有什么我没有配置的吗? #include #include 使用命名空间标准;int main(){字符串
..
我想使用 std::experimental::optional,但 MSVS 2013 告诉我它找不到标题. 为什么它不在那里? 我可以根据其他地方的代码推出自己的代码吗?也许是 C++14 提案? 解决方案 std::experimental::optional 源自 Boost.Optional 库,该实现在 Visual C++ 12.0 中运行良好(尽管它有所不同 一点)
..
对于下面的代码,我不断收到此错误. 在阅读this后,我相信我的错误是成为 for 循环中的 it++,我尝试将其替换为 next(it, 1) 但它没有解决我的问题. 我的问题是,迭代器是给我带来问题的那个吗? #include #include #include #include 使用命名空间标准;结构节点{字符顶点;设置邻近的;};类图{上市:图(){};〜图(){};void
..
回答如何自我复制向量?让我明白对迭代器失效有点困惑.一些文献说“如果您使用 insert、push_back 等,请考虑所有迭代器无效".很明显,它可能会导致向量增长,从而使迭代器无效.如果我知道有足够的空间,那么特殊情况呢? 第一次尝试: myvec.reserve(myvec.size()*3);//这是否可以保护我免受迭代器失效的影响?vector::iterator it = my
..
如何使用 std::valarray 来存储/操作二维数组? 我想看一个二维数组示例,其中元素通过行/列索引访问.像这样的伪代码: matrix(i,j) = 42; 一个如何初始化这样一个数组的例子也很好. 我已经知道 Boost.MultiArray、Boost.uBlas 和 Blitz++. 请随意回答为什么我不应该在我的用例中使用 valarray.但是,我希望多维
..