草庐IT

C++浮点精度

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Floatingpointinaccuracyexamplesdoublea=0.3;std::cout.precision(20);std::cout结果:0.2999999999999999889doublea,b;a=0.3;b=0;for(chari=1;i结果:1​​5.000000000000014211所以..'a'比它应该的要小。但是,如果我们将'a'取50次-结果将比应有的大。这是为什么?在这种情况下如何得到正确的结果?

C++ std::system 'system' 不是 std 的成员

我在编译C++程序时收到一个错误,其中的行从“std::system(SomeString)”进行调用。这个程序是3年前编译的,但今天编译时,我收到一个错误,指出“system”不是“std”的成员。有没有我必须导入才能使用std::system的东西,它是否已被放弃,或者是否已移至另一个头文件。 最佳答案 std::system是(并且一直是)在.C++标准没有定义标准头是否相互包含,如果包含哪些。因此,3年前,在不同的编译器或同一编译器的不同版本上,您的代码可能会意外运行,因为您包含的其中一个header恰好包含.在您现在使用的

c++ - std deque 出奇地慢

我刚刚发现,与我使用预分配数组的“自制”堆栈版本相比,标准stddeque真的很慢。这是我的堆栈代码:templateclassFastStack{public:T*st;intallocationSize;intlastIndex;public:FastStack(intstackSize);FastStack();~FastStack();inlinevoidresize(intnewSize);inlinevoidpush(Tx);inlinevoidpop();inlineTgetAndRemove();inlineTgetLast();inlinevoidclear();};

c++ - 将 std::string 解释为 char_type 的 std::vector?

我有一个template接受constvector&的函数.在所述函数中,我有vectorcbegin(),cend(),size(),和operator[].据我了解,string和vector使用连续空间,所以我想知道我是否可以以一种优雅的方式为两种数据类型重用该函数。可以std::string被重新解释为std::vector的(适当的)char_type?如果可以,限制是什么? 最佳答案 如果你只为constT&类型制作你的模板,并使用begin()、end()等,这两个函数vector和string共享,那么您的代码将适用

c++ - 是否允许从 std 命名空间(即 std::wstring)中的类继承?

类std::wstring缺少一些对“普通”c字符串(和文字)的操作。我想在我自己的自定义类中添加这些缺失的操作:#includeclassCustomWString:publicstd::wstring{public:CustomWString(constchar*);constchar*c_str(void);};上面的代码在使用g++v4.4.1的UbuntuKarmic上编译得很好。但我想知道是否有人反对这样做?编辑:一些例子来阐明我所说的“缺失操作”的意思:std::wstringfoo("hello");//requirestheL()macroorsomethinglik

c++ - std::vector 是否满足 Boost.Interprocess 分配器的容器要求?

在boost::interprocess文档中,它被认为是容器存储在共享内存中的要求:STL容器可能不会假设用分配器分配的内存可以用相同类型的其他分配器释放。仅当分配给一个对象的内存可以与另一个分配时,所有分配器对象必须比较相等,并且这只能在运行时使用operator==()进行测试。容器的内部指针应该是allocator::pointer类型,并且容器不能假定allocator::pointer是原始指针。所有对象都必须通过allocator::construct和allocator::destroy函数构造-销毁。我正在使用带有-std=c++11(和boost1.53)的gcc4

c++ - std::unique_ptr<T[]>::reset 在 gcc 6 中的实现

从C++中的GCC6开始,unique_ptr::reset的声明/定义方法(不是那个,只接受nullptr_t)看起来像这样:template,__and_,is_pointer,is_convertible::type(*)[],element_type(*)[]>>>>>voidreset(_Up__p)noexcept{usingstd::swap;swap(std::get(_M_t),__p);if(__p!=nullptr)get_deleter()(__p);}这在某些时候已更改以实现N4089.根据该文件:Thisfunctionbehavesthesameasthe

c++ - clang 中的别名 std::initializer_list

我想使用std::initializer_list的别名来代替它本身:#includetemplateusingInitializerList=std::initializer_list;//note:candidatetemplateignored:couldn'tinfertemplateargument'T'templatevoidf(InitializerListlist){}intmain(){//error:nomatchingfunctionforcallto'f'f({1,2,3,4,5});}该代码使用gcc&cl没问题。但是,使用clang我得到一个错误::11:3

php - 使用 SWIG 在 PHP 中迭代 std::map

我正在使用SWIG包装一个在PHP中返回std::map的函数。在PHP代码中,我需要遍历map的元素。ThwSWIG库通过std_map.i接口(interface)文件提供对std::map的支持,但仅包装了以下方法:clear()del($key)get($key)has_key($key)is_empty()set($key,$x)size()如何遍历map的元素?我是否需要使用某种包装器扩展std_map.i文件,以用于迭代器和begin()和end()? 最佳答案 正如@awoodland所说,您必须实现迭代器接口(in

c++ - 如何在 C++ 正则表达式中捕获 0-2 组并打印它们?

编辑3当我受困于正则表达式时,我采用了good'ol自定义解析方法。结果并没有那么糟糕,因为文件内容可以非常整齐地标记化,并且可以使用非常简单的状态机在循环中解析标记。那些想要检查的人,在我在Stackoverflow中的另一个问题here中,有一段代码使用range-for、ifstream迭代器和自定义流标记器执行此操作.这些技术大大降低了执行自定义解析器的复杂性。我想在第一部分中将文件内容标记为两个一组,然后逐行标记。我有一个半功能解决方案,但我想学习如何让它变得更好。也就是说,没有“额外处理”来弥补我对捕获组的了解不足。接下来是一些预备知识,最后是一个更精确的问题(行const