草庐IT

带负操作数的 C++ size_t 模运算

因此,模运算可以为您提供三个值:然后:-7%5=3(数学,余数>=0)-7%5=-2(C++)-7%(size_t)5=4(C++)另一个例子:-7%4=1(数学,余数>=0)-7%4=-3(C++)-7%(size_t)4=1(C++)当左手操作数为正时,三种方法的答案都是一样的。但是对于负值,他们似乎都有自己的方法。C++中无符号操作数取模运算的值是如何计算的? 最佳答案 这就是混合有符号和无符号值时发生的情况——困惑![C++14:5.6/2]:Theoperandsof*and/shallhavearithmeticorun

c++ - "Rename"派生类中的成员变量

这个问题可能看起来有点奇怪,但我会尝试对用例进行一些争论。假设您有一个二维(笛卡尔)场的通用实现,其维度为dim1和dim2,坐标为c1和c2。structField2D{structsize_type{size_tdim1,dim2;};structcoordinates{size_tc1,c2;}Field2D(size_typeconst&siz):size_(siz),data(size_.dim1*size_.dim2){}doubleget(coordinatesconst&coords){returndata_[coords.c1*size_.dim2+coords.c2

c++ - Internet Explorer 8 + 压缩

我有一个非常奇怪的问题。我真的希望有人能给出答案,因为我不知道还能问哪里。我正在用C++编写一个由Apache执行并输出HTML代码的cgi应用程序。我正在自己压缩HTML输出-从我的C++应用程序中-因为我的网络主机出于某种原因不支持mod_deflate。我用Firefox2、Firefox3、Opera9、Opera10、GoogleChrome、Safari、IE6、IE7、IE8甚至wget测试了它。它适用于任何,除了IE8。IE8只是说“InternetExplorer无法显示该网页”,没有任何信息。我知道这是因为压缩,只是因为如果我禁用它,它就会起作用。你知道我做错了什么

c++ - 批评我的堆调试器

我编写了以下堆调试器以演示内存泄漏、双重删除和错误的删除形式(即尝试使用deletep而不是delete[]p)给初级程序员。我很想从强大的C++程序员那里得到一些反馈,因为我以前从未这样做过,而且我确信我犯了一些愚蠢的错误。谢谢!#include#include#includenamespace{constintALIGNMENT=16;constchar*constERR="***ERROR:";intcounter=0;structheap_debugger{heap_debugger(){std::cerr0){std::cerr(raw)=token;void*payload

c++ - 使用 libxml2 (c++) 创建字符串

我的问题是我想创建xml树并获得一个简单的字符串对象(甚至是char*)。而且我无法将xml保存到文件中。所以在输入中我有带有完整xml树的xmlDocPtr并且想要获取包含xml但不使用文件的字符串。感谢关注。 最佳答案 使用xmlDocDumpMemory或其任何表亲。用法:voidxml_to_string(xmlDocPtrdoc,std::string&out){xmlChar*s;intsize;xmlDocDumpMemory(doc,&s,&size);if(s==NULL)throwstd::bad_alloc()

c++ - bad_alloc 在初始化和填充 vector 时?

在尝试生成随机数vector时,我偶然发现了一个std::bad_alloc错误。这是我的代码:#include"search.h"#include"gtest/gtest.h"int_size=100;std::vectorGetSortedVector(intsize){//initvectorstd::vectorv(size);//fillwithrandomnumbersfor(std::vector::size_typei=0;iv=GetSortedVector(_size);//nothingmovesfartherthanthisline}附注:我现在确实在使用gen

c++ - ifstream::ifstream 可以读取的最大文件大小是多少

我尝试使用ifstream读取一个3GB的数据文件,但它给出了错误的文件大小,而当我读取一个600MB的文件时,它给出了正确的结果。除了错误的文件大小,我也无法使用ifstream读取整个文件。这是我使用的代码std::wstringname;name.assign(fileName.begin(),fileName.end());__stat64buf;if(_wstat64(name.c_str(),&buf)!=0)std::cout3GB文件的输出是Windowsfilesize:3147046042ifstreamfilesize:-1147921254而600MB文件的输出

c++ - 在 C++ 中我的头文件中应该放什么?

我刚刚开始编写我的第一个C++程序,并且几乎只是边学边做。该程序应该有3个不同的文件,一个头文件(prog1.h),一个prog1.cpp文件(不确定这个文件的正确术语)和一个包含main:的测试文件来测试我们的程序(prog1_test.cpp).没有就此寻求任何帮助(但是,我确定我会在进入它后发布另一个问题),但认为您需要知道该程序应该做什么才能明白我的问题。我们的程序应该从文件中读取一些数字并将这些数字放入二维数组中。然后它应该为每个数字值分配字符并打印当前数组和用字符创建的“图片”。然后它将遍历数组,确保每个数字与其邻居的值相差不超过1,如果相差超过1,程序将用其相邻值的平均值

c++ - 重载删除和检索大小?

我目前正在用C++编写一个小的自定义内存分配器,并希望将它与new/delete的运算符重载一起使用。无论如何,我的内存分配器基本上检查请求的内存是否超过某个阈值,如果是,则使用malloc分配请求的内存块。否则内存将由一些fixedPool分配器提供。这通常有效,但对于我的释放函数来说,它看起来像这样:voidMemoryManager::deallocate(void*_ptr,size_t_size){if(_size>heapThreshold)deallocHeap(_ptr);elsedeallocFixedPool(_ptr,_size);}所以我需要提供指向的block

C++:array.size() 是循环的良好条件吗?

如果有一个名为arr的vector,其中包含大量数据,我要打印该vector中的所有值。我要么使用:intarr_size=arr.size();for(inti=0;i或者这样实现:for(inti=0;i在我看来,第一种实现方式会将vector的大小提取到缓存中,从而使条件在第一次未命中后更快。第二次实现呢?是不是比较慢?每次满足条件时系统都会调用size()方法吗?编辑:假设它正在使用C++。 最佳答案 概括为具有任意主体的循环,您给出的两个变体之间存在一个关键区别:如果arr的大小在循环期间发生变化怎么办?对于第二种情况,如