草庐IT

c++ - 如何使用 std::make_heap

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestionhttp://www.cplusplus.com/reference/algorithm/push_heap/太乱了。要在std中使用堆,首先将元素放入vector中,然后调用std::make_heap(v.begin(),v.end());如果我向vector中插入元素会怎样?堆会弄乱吗?比如v一开始可能有10个元素,我只做第3个元素到第7个元素的堆,现在我往第5个和第9个位置插入元素,这个过程中堆结

C++ 如何断言 vector 中的所有 std::shared_ptr 都引用了某物

当我有一个函数接收一个应该引用某物的(智能)指针时,我总是这样开始:classFoo;voiddoSomething(conststd::shared_ptr&pFoo){assert(pFoo);//...}现在我正在为(智能)指针的vector(或其他容器)寻找类似的断言条件。我能想到的最好的办法是:voiddoSomething(conststd::vector>&pFoos){assert(std::all_of(pFoos.begin(),pFoos.end(),[](conststd::shared_ptr&pFoo){returnpFoo;}));//...}我想知道这是

c++ - std::move 操作 C++

AnthonyWilliams书中的台词:Thefollowingexampleshowstheuseofstd::movetotransferownershipofadynamicobjectintoathread:voidprocess_big_object(std::unique_ptr);std::unique_ptrp(newbig_object);p->prepare_data(42);std::threadt(process_big_object,std::move(p));Byspecifyingstd::move(p)inthestd::threadconstruct

c++ - 对字符串使用 set_union

我有两个vector,我需要在第三个vector中合并它们(不指定第三个vector的大小)std::vectora={"a","b"};std::vectorb={"d","c"};std::vectorc;std::set_union(a.begin(),a.end(),b.begin(),b.end(),c.begin());std::cout这会编译但给出一个空输出。 最佳答案 算法std::set_union需要有序序列。在您的字符串示例中,第一个vector按升序排列,第二个vector按降序排列。此外,vectorc为

c++ - 尝试从 std::runtime_error 继承时出现编译错误

我正在尝试在Ubuntu下用g++编译它:#ifndefPARSEEXCEPTION_H#definePARSEEXCEPTION_H#include#include#includestructParseException:publicstd::runtime_error{explicitParseException(conststd::string&msg):std::runtime_error(msg){};explicitParseException(conststd::string&token,conststd::string&found):std::runtime_error

c++ - std::string 或 std::vector<char> 保存原始数据

我希望这个问题适用于stackoverflow...将原始数据字节(8位)存储在std::string中有什么区别?而不是将它们存储在std::vector中.我正在从文件中读取二进制数据并将这些原始字节存储在std::string中.这很好用,这样做没有问题。我的程序按预期工作。但是,其他程序员更喜欢std::vector方法并建议我停止使用std::string因为它对原始字节不安全。所以我想知道为什么使用std::string可能不安全保存原始数据字节?我知道std::string最常用于存储ASCII文本,但是一个字节就是一个字节,所以我不明白std::vector的偏好.感谢

c++ - std 容器的模板 typedef(没有专门化)?

是否可以在std容器上使用typedef而无需专门化它?这样的代码有效:typedefstd::vectorintVector;但是对于这段代码:templatetypedefstd::vectorDynamicArray;我得到一个错误:templatedeclarationof'typedef'在C++中可以做到这一点吗?? 最佳答案 是的,在C++11中。templateusingDynamicArray=std::vector;(并不是说您应该使用这个确切的别名。) 关于c++-

c++ - 为什么在 std::vector 中使用索引超出范围的运算符 [] 时没有出现异常?

为什么当我使用下面的代码时我没有得到超出范围的异常?std::vectorv;v.resize(12);intt;try{t=v[12];}catch(std::exceptione){std::cout 最佳答案 通过使用operator[],您实际上是在告诉编译器“我知道我在做什么。相信我。”如果您访问数组之外​​的某些元素,那是您的错。你违反了这种信任;你不知道你在做什么。另一种方法是使用at()方法。在这里,您要求编译器对您的访问进行健全性检查。如果它们超出范围,您将获得异常。这种健全性检查可能代价高昂,尤其是在某些深度嵌套

STL - 获取STL vector 中大于某个值的元素的所有位置

我想知道如何找到验证特定条件(例如大于)的元素的索引位置。例如,如果我有一个int值vectorvectorV;V包含值3258211047并且我想获取所有大于5的元素的索引位置。我知道std::find_if但根据文档,它只是找到满足条件的第一个元素。 最佳答案 循环std::find_if,从您上次停止的地方开始。样本(seeitwork):std::vectorresults;autoit=std::find_if(std::begin(v),std::end(v),[](inti){returni>5;});while(it

c++ - std::hash 是否保证 "equal" float 的哈希值相等?

关于almost-equality,std::hash的浮点特化(例如,double或float)是否可靠??也就是说,如果两个值(例如(1./std::sqrt(5.)/std::sqrt(5.))和.2)应该比较相等但不会使用==运算符这样做,std::hash将如何表现?那么,我能否依靠double作为std::unordered_map键来按预期工作?我看过“Hashingfloatingpointvalues”,但那是关于提升的问题;我问的是C++11保证。 最佳答案 std::hash对所有类型都有相同的保证被实例化:如