草庐IT

page_specific_resize

全部标签

c++ - GCC 手册中提到的 "C++ ABI Specification"是什么?

我在查看C++的GCC手册时,发现了以下引述:Version0referstotheversionconformingmostcloselytotheC++ABIspecification.Therefore,theABIobtainedusingversion0willchangeindifferentversionsofG++asABIbugsarefixed.(source)可以看出,上述段落引用了某种看似标准的C++ABI。然而,据我了解,不存在这样的ABI。这段话在说什么?一个好的答案将给出尽可能详尽的解释。将“C++ABI规范”放入我首选的搜索引擎中没有任何用处。

c++ - deque.resize() 来自 *front*?

如何从前面而不是后面调整一个std::deque?(是的,我当然可以push_front一个虚拟值数千次,但是有更好/更有效的方法吗?) 最佳答案 insert的重载插入了N个元素:std::dequec;std::size_tnew_size=get_new_desired_size();c.insert(c.begin(),new_size-c.size(),int());(此示例要求new_size>=c.size()) 关于c++-deque.resize()来自*front*?

C++ STL : Why is there no upper_bound equivalent that retrieves the greatest element smaller then a specific key?

通常,STL是为提高速度而构建的。然而,在map和set数据结构上只有upper_bound和lower_bound并且没有操作来检索具有小于输入键的最大键的条目k.为什么是这样?我知道我可以简单地做一个lower_bound并做一个--it检索它,但根据数据结构,立即搜索正确的条目可能比搜索另一个条目然后返回一步更有效。例如,std::map使用红黑树,即二叉搜索树。如果upper_bound返回的元素是大于根的最小元素,则--it必须回到根,查询O(logn)的额外成本。如果这是Java,我会接受设计决定。然而,STL是为实现最高速度而构建的,那么为什么要省略此操作?澄清:我不是在

c++ - C++11 是否强制要求 vector<int> 将 resize() 中的元素归零?

这个问题在这里已经有了答案:std::vector,defaultconstruction,C++11andbreakingchanges(2个答案)关闭9年前。这个问题是关于new[]int和new[]int()在语义和性能上的差异,以及在向allocator_traits::construct添加ctor参数的完美转发时可能无意中创建的从第一个到第二个措辞的变化().这个问题不涉及一个非常明显的问题,即默认ctor运行在由vector的resize()构造的所有新元素上。对我来说,在调整大小时清除内置类型vector的元素似乎是一种浪费。但是VS2012的实现使得resize(n)

C++ 标准 vector resize() 函数

resize()根据给定的大小添加/删除元素。reserve()保留内存空间,不会重新分配内存。我的问题是resize是否也像vector的容量一样工作,只会不增加?要添加,将组合:std::vectorvector;vector.reserve(5);vector.resize(5);有意义吗?它是多余的吗?这里的目标是能够覆盖vector中的值,而无需vector分配任何额外空间。 最佳答案 来自thissite:resize():这使您可以将vector的大小更改为您想要的任何大小。它将用元素填充底层缓冲区。reserve()

C++ 与 git 和 CMake : How to build submodules with specific parameters?

考虑一个在git存储库中组织的C++项目。假设git存储库有一个子模块,(super)项目依赖于该子模块构建了一个库。如果(super)项目不仅依赖于库,还依赖于使用特定(CMake)参数构建的库,那么如何确保在构建(super)项目时使用这些参数构建子模块? 最佳答案 必须将构建选项(如MYLIB_WITH_SQLITE)添加到库的接口(interface)中,即在老式配置的情况下添加到MYLIB_DEFINITIONS变量中-模块,或者到INTERFACE_COMPILE_DEFINITIONS属性,如果库使用install(E

c++ - std::vector::resize 应该默认构造多少次新元素?

我们的团队刚刚遇到了此处描述的相同问题http://forums.codeguru.com/archive/index.php/t-514404.html,即调用some_vec.resize(new_size),其中N=new_size-some_vec.size()且N>=2,并且VC10默认构造所有N个新元素,而GCC默认构造单个元素,作为prototype元素,为新元素复制构造它N次。因为这是一个uuidvector,其中默认构造函数随机初始化每个新实例,我们最终在GCC中得到N次相同的uuid,在VC中得到N次不同的uuid。这足以对我们在一个平台上的测试套件造成严重破坏,但

c++ - 如果 new_size 不大于旧的,C++ 标准是否保证 std::string::resize(new_size) 不会导致分配?

这个问题在这里已经有了答案:Doesthestandardguarantee,thatstd::string::resizewillnotdoreallocatememory,ifthenewsizeislessthanorequaltoastheoldone?(1个回答)关闭3年前。#include#includeintmain(){autos="hello"s;autop=&s[0];s.resize(3);assert('h'==*p);//alwaysok?}如果new_size不大于旧的,C++标准是否保证std::string::resize(new_size)不会导致分配

c++ - std::vector<T>::resize( n, val ) 是否足以进行初始化?

这是一个特定于C++11的问题。假设我有一个vectorstd::vectorv已经使用过,我想将其调整为n使用现有值初始化的元素Tval.(典型用例:vector是被回收实例的成员)。以下几种方式各有什么优缺点,哪种方式效率最高?1)是std::vector::resize(n,val)足以进行初始化吗?v.clear();v.resize(n,val);2)如果不是,那么我假设以下是正确的?v.clear();v.resize(n);std::fill(v.begin(),v.end(),val);3)交换怎么样?v.swap(std::vector(n,val));

C++ 宏 : manipulating a parameter (specific example)

我需要更换GET("any_name")与Stringstr_any_name=getFunction("any_name");困难的部分是如何去掉引号。可能的?有什么想法吗? 最佳答案 怎么样:#defineUNSAFE_GET(X)Stringstr_##X=getFunction(#X);或者,为了防止嵌套宏问题:#defineSTRINGIFY2(x)#x#defineSTRINGIFY(x)STRINGIFY2(x)#definePASTE2(a,b)a##b#definePASTE(a,b)PASTE2(a,b)#def