草庐IT

c++ - 读取 vector 时出现段错误

在C++程序中,当我想读取大小为2697806的vector时,总是会出现Segmentationfault错误。我已经尝试了所有可能的阅读方式:voidAUROC(vectorv){...for(std::vector::size_typei=0;i!=v.size();i++)if(v[i]>0)++pos;else++neg;for(std::vector::size_typei=0;i!=v.size();i++)if(v[i]>0)++pos;else++neg;for(vector::iteratori=v.begin();i!=v.end();++i)if(*i>0)++

c++ - 多重继承 : size of class for virtual pointers?

给定代码:classA{};classB:publicvirtualA{};classC:publicvirtualA{};classD:publicB,publicC{};intmain(){cout输出:sizeof(D)8每个类都包含自己的虚指针,但不包含其任何基类的虚指针,那么,为什么class(D)的Size是8? 最佳答案 这取决于编译器的实现。我的编译器是VisualStdioC++2005。代码如下:intmain(){cout会输出sizeof(B):4sizeof(C):4sizeof(D):8B类只有一个虚指针

c++ - 使用 memoized 函数观察到奇怪的性能

我正在研究使用欧几里德算法计算两个数的GCD的东西。我像往常一样实现了标准的单线,并且效果很好。它用于计算系列并调用gcd()的算法中每个元素多次,如n变大。我决定看看我是否可以通过内存来做得更好,所以这是我尝试过的:size_tconstgcd(size_tconsta,size_tconstb){returnb==0?a:gcd(b,a%b);}structmemoized_gcd:privatestd::unordered_map{size_tconstoperator()(size_tconsta,size_tconstb){unsignedlonglongconstkey=(

c++ - 错误 C4018 与 vector 大小 () 在 c++

当我在C++中将函数.size()与vector一起使用时,我收到警告下面是示例代码:vectorobject;object.push_back(newclassname2);for(inti=0;i我收到警告:warningC4018:'我不允许在我的最终代码中有任何错误或警告,所以我需要摆脱这个/找到一个替代方法,我怎样才能摆脱这个? 最佳答案 问题在于,在处理有符号与无符号的比较时,可能会出现一个潜在的(破坏性)问题。如果您使用的是32位计算机,其中有一个已签名的int是4个字节,则vector的大小可能会超过该类型可表示的最

c++ - 什么时候可以将结构安全地散列为字节数组?

对于相等性意味着相同的最派生类型和每个数据成员的字节相等性的结构,如果有的话,何时可以将该结构安全地散列为字节数组?这份文件http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3333.html在标题“将对象散列为字节数组”下,建议不能将具有任何填充的结构安全地散列为字节数组。是否需要对填充进行显式测试才能将结构安全地散列为字节数组?够了吗?如果是这样,下面的草图是否恰本地说明了该测试?#include#includestructA{inti;floatf;charc;};//hashingwouldstartatoffs_

c++ - 为什么引用上的 constexpr 函数不是 constexpr?

考虑以下函数:templateautoconcatenate(std::array&data1,std::array&data2){std::arrayresult;autoiter=std::copy(data1.begin(),data1.end(),result.begin());std::copy(data2.begin(),data2.end(),iter);returnresult;}intmain(){std::arraydata1{0x00};std::arraydata2{0xFF};autoresult=concatenate(data1,data2);return

c++ - 覆盖全局 operator new 以跟踪巨大的内存分配?

我正在尝试生成大型单体应用程序的特殊构建。我试图解决的问题是跟踪难以重现的巨大内存分配(30-80GB,根据操作系统报告判断)。我认为问题是std::vector调整为负32位整数值。表现出这种行为的唯一平台是Solaris(也许它是唯一能够成功分配此类连续内存块的平台)。我可以用我的类全局替换std::vector,将所有调用委托(delegate)给真实vector,观察可疑分配(size>0x7FFFFFFFu)吗?也许有选择地替换采用size_t和resize()方法的构造函数?甚至可能劫持新的全局运营商? 最佳答案 为什么

c++ - (如何)你如何处理 C++ 代码中可能出现的整数溢出?

时不时地,尤其是在对某些代码库进行64位构建时,我注意到在很多情况下都可能出现整数溢出。最常见的情况是我做这样的事情://CreatesaQPixmapoutofsomeblockofdata;thisfunctioncomesfromlibraryAQPixmapcreateFromData(constchar*data,unsignedintlen);conststd::vectorbuf=createScreenShot();returncreateFromData(&buf[0],buf.size());//事情是std::vector::size()很好地返回了一个size_

c++ - 调整不可迭代容器以通过自定义模板化迭代器进行迭代

我有一些类,由于各种原因超出了本次讨论的范围,我无法修改(省略了不相关的实现细节):classFoo{/*...irrelevantpublicinterface...*/};classBar{public:Foo&get_foo(size_tindex){/*whatever*/}size_tsize_foo(){/*whatever*/}};(我正在处理许多类似的“Foo”和“Bar”类,它们都是从其他地方生成的代码和我不想子类化的东西,等等)[编辑:澄清-尽管有许多类似的“Foo”和“Bar”类,但保证每个“外部”类都有getter和size方法。根据“内部”包含的类型,每个“外

c++ - 有什么方法可以找到分配给映射的内存大小?

有没有什么方法可以找到分配给C++中的映射的内存量/大小?有一个函数可以找到map的大小,即map中的条目数,但是内存有没有这样的方法。我有一张map(字符串,字符串)。sizeof()总是给我48的大小。为什么会这样?谢谢:) 最佳答案 不,没有。但是,对于支持.size方法的类,例如字符串或标准容器,您可以实现类似的功能:templateunsignedlongmapSize(conststd::map&map){unsignedlongsize=sizeof(map);for(typenamestd::map::const_i