草庐IT

-std=gnu99

全部标签

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

c++ - std::vector 元素中的常量引用

这只是我的编译器还是禁止在std::vector元素中使用cons引用。考虑以下结构:structY{constint&x;Y(constint&p_x):x(p_x){}};现在,当我尝试将此类对象推到vector上时:std::vectoryv;intx=5;Yy(x);yv.push_back(y);我收到编译器错误:“错误:非静态引用成员‘constint&Y::x’,不能使用默认赋值运算符”。复制ctor还不够吗? 最佳答案 vector元素必须是可赋值的。来自C++标准的23.2.4类模板vector部分:...thes

c++ - std::string::c_str() 是否总是返回以 null 结尾的字符串?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:stringc_str()vs.data()我使用strncpy(dest,src_string,32)将std::string转换为char[32]来创建我的C++类使用遗留C代码。但是std::string的c_str()方法是否总是返回以null结尾的字符串?

c++ - 对于可 move 类型,删除 std::vector 中间的元素仍然很昂贵吗?

通常认为删除std::vector中间的元素代价高昂,因为它需要复制它之后的每个元素来填充空洞。在C++11中,std::vector将向下move所有元素,这应该非常快(如果仅与拷贝相关),至少我是这么认为的。当然,它在时间上仍然是线性的,但总的来说它应该比旧版本更快。这是真的吗?我再也不用担心删除中间的某些对象了吗? 最佳答案 这取决于vector中的内容。如果它是POD或指针,我无法想象它会有什么不同。如果类实例复制起来很繁重,但可以非常快速地move,我希望使用C++0x可以加速。但是,我认为如果从std::vectors中

c++ - 使用 end() 迭代到 std::vector 的最后一个元素--

我有一个std::vector并且我希望iterator指向vector中的最后一个元素;我将存储此迭代器供以后使用。注意:我想要一个指向它的迭代器引用,而不是std::vector::back。因为我希望稍后能够从std::vector::begin计算此对象的索引。以下是我将迭代器获取到最后一个元素的逻辑:std::vectorcontainer;std::vector::iteratorit=container.end()--;由于std::vector::end具有O(1)时间复杂度,是否有更好的方法来做到这一点? 最佳答案

c++ - 为什么 std::for_each 是非修改序列操作?

我刚刚在C++标准中读到,std::for_each是一个非修改序列操作,还有find、search和很快。这是否意味着应用于每个元素的函数不应修改它们?这是为什么?可能会出什么问题?这是一个示例代码,其中修改了序列。你能看出它有什么问题吗?voidfoo(int&i){i=12;}intmain(){std::vectorv;v.push_back(0);std::for_each(v.begin(),v.end(),foo);//vnowcontains12}我怀疑这只是一个解释问题,但我想听听您对此的看法。PS:我知道我可以使用std::transform而不是for_each,

C++11 std::shared_ptr + boost::序列化

这个问题在这里已经有了答案:Howcanboost::serializationbeusedwithstd::shared_ptrfromC++11?(7个答案)boostserializeandstd::shared_ptr(2个答案)关闭9年前。嗨,有人已经成功地使用boost::serialization序列化了C++11std::shared_ptr。那里有很多过时的帖子,但没有一个具有可接受的解决方案。我不打算讨论为什么我要使用std::shared_ptr只是接受它!我找到了另一个帖子:boostserializeandstd::shared_ptr但它没有回答我如何序列化

c++ - 是否允许 std::vector::push_back 因重新分配或构造失败以外的任何原因抛出?

考虑:std::vectorv;v.reserve(1);v.push_back(1);//isthisstatementguaranteednottothrow?我选择了int因为它没有可以抛出的构造函数——显然,如果T的某些复制构造函数抛出异常,那么该异常就会转义vector::push_back.这个问题同样适用于insert作为push_back,但它的灵感来自Isitsafetopush_back'dynamicallyallocatedobject'tovector?,这恰好询问push_back.在C++03和C++0x标准/FCD中,vector::insert的描述说

c++ - C++ 的 std::regex 中有最大组限制吗?

代码如下:找到31组时:try{regexre("(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)",tr1::regex::icase);}catch(regex_errore){std::cout但是,我尝试添加一组(总共32组),哎呀:try{regexre("(0)(1)(2)(3)(4)(5)(6)(7)(8)(9)(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)(o)(p)(q)(r)(s)(t)(u)