草庐IT

绝大部分

全部标签

c++ - 使用迭代器将部分文件流读入字符串

这是我到目前为止尝试过但没有成功的方法:std::stringReadPartial(std::ifstream&_file,int_size){std::istreambuf_iteratorfirst(_file);std::istreambuf_iteratorlast(_file);std::advance(last,_size);returnstd::string(first,last);}我知道如何阅读整个文件。std::stringRead(std::ifstream&_file){std::istreambuf_iteratorfirst(_file);std::ist

c++ - map<..,..> 的第二部分是否稳定?

如果我们有一个map>是vectors在map的红黑树发生变化或它存储指向vector的指针时移动s或类似的东西并且不移动它们(否则使用map将不再是O(lgn)例如,如果我们将元素push_back到一些vectors) 最佳答案 看这个:std::map,pointertomapkeyvalue,isthispossible?第二个最佳答案:Section23.1.2#8(associativecontainerrequirements):"Theinsertmembersshallnotaffectthevalidityofi

c++ - 为什么参数修饰符(即 'const' 或 'volatile' )不被视为函数类型或签名的一部分?

请注意,以下两个函数具有相同的类型和签名:voidfoo1(intt){}//foo1hastype'void(*)(int)',andsignature'(*)(int)'voidfoo2(constintt){}//Alsotype'void(*)(int)',signature'(*)(int)'(const不是函数类型或函数签名的一部分)。同样,返回类型上的修饰符(const或volatile)不会影响函数类型或函数签名。但是,在函数定义本身(未显示)中,命名变量t确实在foo2中保持const资格。有许多StackOverflow问题在讨论为什么函数的返回类型不被视为函数签名

c++ - 模板类方法不会导致错误——这是标准的一部分吗?

当我使用g++--std=c++98-Wall-Werror-WpedanticTest.cc编译以下内容时,没有错误。templatestructTemplateClass{T*ptr;TemplateClass(T*p):ptr(p){}intfoo(){returnptr->bar();}};structExampleClass{};intmain(){TemplateClassx(newExampleClass());}我预计编译器会提示ExampleClass没有实现方法bar。但看起来它只会在我实际使用方法foo时才会提示。我能否在任何C++98和C++11兼容编译器上依赖

c++ - 当新功能作为语言核心的一部分出现时,现有库会消亡吗?

**请大家,这个问题并不意味着开始任何火焰war。**我试图了解当语言中以前不存在的相同功能现在作为语言的一部分出现时,现有库会发生什么情况?例如C++很快就会将std::thread作为语言标准的一部分,那么POSIX或Boost库会发生什么变化呢?我也很想了解其他编程语言的用户在这方面可能有什么经验。 最佳答案 新技术的采用绝非一蹴而就。当编译器实现新的标准库版本时会有一个滞后,然后当这些编译器到达开发人员时会出现另一个滞后。我最近的两份工作都是偶尔与VisualC++6进行交互,它已经有10多年的历史了。非常不愿意从工作代码转

c++ - 对列表串联(STL)进行排序的有效方法,合并排序提示,部分排序

我有一种情况,我得到一个已经部分排序的值列表。我的最终列表中有N个block,每个block都已排序。所以我最终得到了这样的数据列表(斜杠只是为了强调):12345678/12345/23456789/1234我将这些作为一系列指向对象的指针放在vector中。目前我只是将std::sort与自定义比较器一起用于排序。我猜这是次优的,因为我的序列是一些退化的情况。是否有任何其他STL函数、提示或其他我可以用来提供此类数据的最佳排序?(Boost库也很好)。虽然我不能轻易地分解输入数据,但我当然可以确定子序列从哪里开始。 最佳答案 你

c++ - 混合部分模板特化和默认模板参数

我想创建一个通用vector类并为一些情况创建特化。像这样的东西(它不编译,但希望传达我的意图):templateclassVector{public:typedefVectorVecType;Vector(){/**/}Vector(constVecType&other){/**/)Vector&operator=(constVecType&other){/**/}VecTypeoperator+(constVecType&other){/**/}VecTypeoperator-(constVecType&other){/**/}Toperator*(constVecType&oth

c++ - C 标准库的(其余部分)未涵盖 C 标准库的哪些部分?

TheC++libraryincludesthesamedefinitionsastheClanguagelibrary但C++库似乎在非C库头文件中复制(/扩展)了C库的某些功能。比如C库有,C++库有和;C库有,C+库有和。如果我需要一个字符串类,我假设我最好使用而不是,因为可以受益于C++中的所有非C功能(例如异常)。但是C库中有一些功能在C++库中没有以任何其他形式存在。例如,我在之外找不到像memcpy和memcmp这样的东西。C库的哪些部分在非C库头文件中没有类似物?(如果C++标准的版本对此很重要,我对C++11感兴趣。) 最佳答案

c++ - 可变参数模板成员函数的部分特化

当成员函数使用可变参数模板进行模板化时,我正在为成员函数的特化而苦苦挣扎。以下示例对整个类进行了专门化处理,并且运行良好:templateclassC;templateclassC{};templateclassC{};intmain(){Cc{};}下面的不是,尽管它背后的想法与上面的完全相同:classF{templatevoidf();};templatevoidF::f(){}intmain(){}我收到以下错误,但我不明白这是什么原因:main.cpp:7:23:error:non-typepartialspecialization‘f’isnotallowedvoidF::

c++ - 为什么 nullptr 是核心语言的一部分,而 nullptr_t 是 STL 的一部分?

据我所知nullptr是核心语言的一部分。引用C++11:(18.2/9)nullptr_tisdefinedasfollows:namespacestd{typedefdecltype(nullptr)nullptr_t;}并在header中定义. 最佳答案 因为它可以。C++标准化过程的一个中心目标是在向语言添加内容时尽可能少地改变核心语言。nullptr篡改了0的用法来表示空指针和,呃,零。由于显而易见的原因,使用0导致问题,f(0)调用f(int)还是f(int*)?于是在核心语言中加入了一个全新的字面量:nullptr。它