草庐IT

-std=gnu99

全部标签

c++ - 为什么将 'ifstream' 和 'ofstream' 添加到 "std"中,而 'fstream' 可以同时满足这两个目的?

使用std::fstream可以声明ifstream和ofstream两种类型的对象。唯一的区别是,对于fstream,我们需要提供in、out、app作为参数,这可能并不总是需要其他两个。ifstream,ofstream有什么特别之处是fstream无法实现的,或者只是为了方便编码? 最佳答案 这有点像问为什么我们想要const无论如何你都可以从变量中读取和写入。它允许编译时检查,这是减少错误的一项非常宝贵的功能。它也更加self记录,因为在没有调用构造函数的情况下查看声明时,您可以看到它是输入、输出还是两者兼而有之:您提到的参

c++ - boost 序列化 std::unique_ptr 支持

boost序列化库支持std::unique_ptr的序列化吗?我试图编译下面的代码,但如果我包含boost::archive::text_oarchiveoa(ofs);oa行,编译器(顺便说一句,带有-std=c++11标志的gcc4.7)抛出一个错误/usr/include/boost/serialization/access.hpp:118:9:错误:‘classstd::unique_ptr’没有名为‘serialize’的成员#include#include#include#include#includeclassMyDegrees{public:voidsetDeg(in

c++ - 在 C++ 中检索 std::map 的随机键元素

如何在C++中获取std::map的随secret钥?使用迭代器?我不想维护额外的数据结构 最佳答案 std::map迭代器是双向的,这意味着选择一个随secret钥将是O(n).在不使用其他数据结构的情况下,基本上您唯一的选择是使用std::advance从begin()开始随机递增.例如:std::mapm;autoit=m.begin();std::advance(it,rand()%m.size());Krandom_key=it->first;(或者如果您有权访问rand(),则将std::mt19939换成(例如)。

c++ - std::optional 实现为 union vs char[]/aligned_storage

在阅读GCC对std::optional的实现时,我注意到了一些有趣的事情。我知道boost::optional实现如下:templateclassoptional{//...private:boolhas_value_;aligned_storagestorage_;}但是libstdc++和libc++(以及Abseil)都像这样实现它们的可选类型:templateclassoptional{//...private:structempty_byte{};union{empty_byteempty_;Tvalue_;};boolhas_value_;}在我看来,它们在功能上是相同的

c++ - C++ 中 std::map 的持久化

您是否知道任何简单或简单的方法来使map对象(来自STL库)持久化(即将其写入文件)以便稍后在程序运行时恢复其状态??谢谢你的帮助 最佳答案 我相信BoostSerialization库能够序列化std::map,但标准库本身没有提供任何方法。Serialization是一个很棒的库,具有很多功能,易于使用和扩展到您自己的类型。 关于c++-C++中std::map的持久化,我们在StackOverflow上找到一个类似的问题: https://stackov

c++ - 获取给定地址的 std::vector 元素的索引

假设我有一个std::vector并且我通过某种方式获得了第n个元素的地址。给定我的std::vector的基地址,是否有一种简单的方法(比遍历vector更快)来获取元素出现的索引?假设我确定该元素在vector中。 最佳答案 既然您知道元素在vector中,并且vector保证其存储是连续的,您可以这样做:index=element_pointer-vector.data();或index=element_pointer-&vector[0];请注意,从技术上讲,连续保证是在C++03中引入的,但我还没有听说过没有碰巧遵循它的C

c++ - std::begin() 和 std::end() 依赖 ADL?

当遍历标准容器时,您认为省略std::前缀并依靠ADL来查找定义是个好主意吗?示例:std::vectorvec=get_vec();//range-basedforloopwouldbepreferredhere,butjustforthesakeofexamplefor(autoit=begin(vec),end=end(vec);it!=end;++it){/*...*/}是否有理由做或不做? 最佳答案 如果您打算使用ADL来更改容器类型而不更改循环,则添加usingstd::begin;使用std::end;。这确保它从具有

c++ - 为什么更喜欢 std::vector 而不是 std::deque?

这个问题在这里已经有了答案:WhywouldIpreferusingvectortodeque(10个答案)关闭3年前。它们都具有O(1)的访问复杂度和O(n)的随机插入/移除复杂度。但是vector在扩展时由于重新分配和复制而花费更多,而deque则没有这个问题。deque似乎性能更好,但为什么大多数人使用vector而不是deque?

C++17 std::from_chars 和 std::to_chars 的用途?

在C++17之前,存在多种将整数、float和double与字符串相互转换的方法。例如,std::stringstream、std::to_string、std::atoi、std::stoi,其他人可以用来完成这些任务。为此,有很多帖子讨论了这些方法之间的差异。但是,C++17现在引入了std::from_chars和std::to_chars。为此,我想知道引入另一种与字符串相互转换的方法的原因。一方面,这些新函数与以前的方法相比有哪些优势和功能?不仅如此,这种新的字符串转换方法还有什么明显的缺点吗? 最佳答案 std::str

c++ - std::tr1 中的 shared_ptr

我正在使用gcc编译器的平台上工作,但是boost无法在其上编译。我想知道在gcc的std:tr1中包含shared_ptr的正确方法是什么?我查看的文件说不直接包含它,据我所知没有其他文件包含它:| 最佳答案 在G++4.3中,#include应该可以解决问题。您将在std::tr1::shared_ptr找到shared_ptr。 关于c++-std::tr1中的shared_ptr,我们在StackOverflow上找到一个类似的问题: https://