草庐IT

c++ - 使 std 的数据结构默认使用我现有的非静态哈希函数 "hashCode()"

我有一个中等大小的代码库(>200.cpp),它使用函数hashCode()返回哈希值:-classB01{//aclass//.....complexthing....public:size_thashCode(){/*hashalgorithm#H01*/}};classB02{//justanotherunrelatedclass//.....complexthing....public:size_thashCode(){/*#H02*/}//Thisisthesamenameasabove};我已经在不同的地方使用过它,例如在我的自定义数据结构中。它运行良好。现在,我想让std

c++ - 如何在插入过程中更改插入的值?

我想将vectorb中的值插入到vectora中,并在插入过程中将这些值乘以-1。目前我只是简单地插入元素,然后将它们乘以-1:a.insert(std::end(a),std::begin(b),std::end(b));//...如何在不修改原始bvector的情况下在插入过程中获得负值?我想实现的目标:olda={2,3,4}b={3,4,5}a={2,3,4,-3,-4,-5} 最佳答案 您可以使用std::transform像这样:#includestd::transform(std::cbegin(b),std::cen

c++ - 以安全的方式从 char* 创建 std::string

我有一个char*p,它指向一个以\0结尾的字符串。如何以异常安全的方式从中创建C++string?这是一个不安全的版本:stringfoo(){char*p=get_string();stringstr(p);free(p);returnstr;}一个明显的解决方案是try-catch-有更简单的方法吗? 最佳答案 您可以使用C++11中的shared_ptr或Boost:stringfoo(){shared_ptrp(get_string(),&free);stringstr(p.get());returnstr;}这使用了sh

c++ - 将 uint64_t 转换为 std::string

如何将uint64_t值传输到std::string?我需要构造包含此值的std::string例如这样的事情:voidgenString(uint64_tval){std::stringstr;//.....somecodeforstrstr+=(unsignedint)val;//????}谢谢 最佳答案 在C++11中你可以只使用:std::to_string()它在标题中定义http://www.cplusplus.com/reference/string/to_string/

c++ - 为什么 std::accumulate 对于标准数组会有这样的行为?

我刚接触C++,我想我已经掌握了指针,但是std::accumulate()让我感到困惑。给定数组:inta[3]={5,6,7};我想用std::accumulate()对数组的值求和,所以我向它传递了一个指向第一个元素的指针,然后是最后一个元素,然后是蓄能器。std::accumulate(a,a+2,0);std::accumulate(&a[0],&a[2],0);糟糕:其中任何一个只返回前两个元素的总和:11。另一方面,如果第二个参数是一个无意义的指针,就超出了范围......std::accumulate(a,a+3,0);std::accumulate(&a[0],&a[

c++ - 在不释放内存的情况下销毁 std::vector

假设我有一个函数可以将数据放入标准vector中:voidgetData(std::vector&toBeFilled){//Pushdatainto"toBeFilled"}现在我想将这个数据发送到另一个函数,完成后应该释放数据:voiduseData(int*data){//Dosomethingwiththedata...delete[]data;}两个函数(getData和useData)都是固定的,不能更改。这在复制数据一次时工作正常:{std::vectordata;getData(data);int*heapData=newint[data.size()];memcpy(

c++ - 为什么将 std::string 写入 cout 会导致未知运算符 << 错误?

当我尝试从我的方法之一输出返回值时出现错误:Error:Nooperator"main.cpp#includeusingnamespacestd;#include"Book.h"intmain(){book.setTitle("AdvancedC++Programming");book.setAuthorName("Linda","Smith");book.setPublisher("MicrosoftPress","OneMicrosoftWay","Redmond");book.setPrice(49.99);cout>i;return0;};返回字符串的方法:stringBook

c++ - 应该弃用 std::list 吗?

根据BjarneStroustrup的slides来自他的GoingNative2012keynote,std::list中的插入和删除在现代硬件上效率极低:Vectorbeatslistmassivelyforinsertionanddeletion如果确实如此,std::list还剩下哪些用例?那么它不应该被弃用吗? 最佳答案 vector和列表解决不同的问题。List保证迭代器在您插入和删除其他元素时永远不会失效。Vector不提供这种保证。这不仅仅与性能有关。所以答案是否定的。不应弃用列表。编辑除此之外,C++并不是专门为“

c++ - 使用 memcpy 将 std::vector 复制到 protobuf 的重复字段

起初我有这个简单的protobuf文件messagemessagetest{...repeatedfloatsamples=6;....}用这个方法创建一个头文件//repeatedfloatsamples=6;inlineintsamples_size()const;inlinevoidclear_samples();staticconstintkSamplesFieldNumber=6;inlinefloatsamples(intindex)const;inlinevoidset_samples(intindex,floatvalue);inlinevoidadd_samples(

c++ - 如何初始化类型特征的静态 std::unordered_map?

给定以下类型特征,我如何用一些std::pair初始化Fields?templatestructManagerDataTrait{staticconststd::unordered_mapFields;//...};我尝试使用lambda,但VisualStudio说Fields不是可以明确专门化的实体。templateconststd::unordered_mapManagerDataTrait::Fields=[]{std::unordered_mapfields;fields.insert(std::make_pair("height","FLOAT"));fields.inse