草庐IT

c++ - 不确定 unordered_map 是如何工作的

我对unordered_map的工作原理、桶是什么以及它们的管理方式有点困惑。来自thisblogpost,unordered_map是vector的vector。我的问题是:假设桶是“内部”vector是否正确?由于每个桶(vector)可以包含多个元素,由哈希表(“外部”vector)上的哈希冲突给出,并且由于我们必须扫描这个内部vector(在线性时间内),是否正确假设我们必须在键类型上定义equal方法(沉迷于哈希运算符)以便在存储桶中找到键?默认情况下外部vector(哈希表)的大小是多少?默认的内部vector大小是多少?如果一个桶中的元素数量变得太大会怎样?换句话说,当重

c++ - 一个类对象可以容纳多大的属性?如何确定堆栈/堆限制?

我有一个需要大量内存的类。classBigClass{public:BigClass(){bf1[96000000-1]=1;}doublebf1[96000000];};我只能通过在堆内存中“新建”一个对象来启动类。BigClass*c=newBigClass();assert(c->bf1[96000000-1]==1);deletec;如果我在没有"new"的情况下启动它。我将在运行时遇到段错误。BigClassc;//SIGSEGV!如何确定内存限制?还是我最好始终使用"new"? 最佳答案 首先,既然您已授权此C++而不是

c++ - 如何在不实例化类型的情况下确定两种 C++ 类型?

我有以下问题:我想在不实际评估“结果”类型的情况下确定两种类型-因为该类型可能根本不存在-是无效的。(请不要使用C++11的东西)例子:#include#includetemplatestructTemplateIf{};templatestructTemplateIf{typedefTResult;};templatestructTemplateIf{typedefFResult;};intmain(intargc,char**argv){//OnGCCthisiserrorasstd::iterator_traits::value_typedoesn'texisttypenameT

c++ - 使用基类指针确定子类的类型

有没有办法通过基类指针来判断子类的类型?我在这样的类构造函数中声明了一个指针在.h文件中baseclass*screen;在构造函数中screen=newchildclass();假设基类有5个不同的子类,在我的程序中我切换指针以指向各种子对象,我如何确定屏幕当前指向的对象的类型? 最佳答案 不要。使用虚拟调度为不同的派生类型实现不同的行为。 关于c++-使用基类指针确定子类的类型,我们在StackOverflow上找到一个类似的问题: https://sta

c++ - 确定c++方法的大小

我有一个.cpp文件,其中定义了各种方法://test.cpp//foo()isnotinlinedvoidfoo(){...}我编译它:g++test.cpp-otest.o-S现在我想通过检查test.o来确定指令foo()占用了多少字节的内存。我该怎么做?我问是因为通过仔细的分析和实验,我确定我正在招致指令缓存未命中,导致某些关键路径上的速度显着下降。因此,我想了解各种方法占用了多少字节,以指导我缩小指令集大小的努力。 最佳答案 我不会为此推荐-S标志,除非您喜欢ISA的手动和手动计算指令大小。取而代之的是,只需构建和反汇编,

c++ - 确定 c/c++ 代码中内存泄漏的工具

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion在unix环境下,有没有什么工具可以很方便的分析代码,并提到在代码的某些部分有可能发生内存泄漏。HPUX/AIX/Solaris

c++ - 如何在 C++ 中正确定义函数对象?

我在一个非常简单的代码上遇到了一个我无法修复的非常奇怪的错误。我定义了以下函数对象:templateclassL2Norm{public:doubleoperator()(constPoint&p){/*computestheL2-normofthepointP...*/}doubleoperator()(constPoint&p,constPoint&q){returnL2Norm(p-q);}};这里是类Point在存储n之前定义明确n中一个点的坐标维空间(具有所需的运算符,...)。我希望得到一个点的l2范数p(例如创建为Pointp)使用L2Norm(p).但这给了我以下错误:

c++ - 使用 static_assert 确定特定模板参数是否为特定无类型类模板

我想要一个将参数限制为仅派生自特定模板类的类型的函数。在这种情况下,basic_string(来自STL-docs)。例如,声明了一个wstring:typedefbasic_string,allocator>wstring;基本思路是这样的:templatevoidstrings_only_please(TStringmessage){static_assert(is_base_of::value,"Notastringtype!");}当然,虽然没有指定basic_string,但它无法编译……它需要一个真实的类型。(虽然我可能只对少数实际字符串类型进行硬编码,但我正在寻找针对此模

c++ - 确定升压变体中的最大 sizeof()

给定:boost::variant在编译时计算如下:max(sizeof(T1),sizeof(T2),sizeof(T3),...,sizeof(TN))我不知道如何解决这个问题,但是this答案阐明了我如何开始。使用该答案中的代码和两种类型,T1和T2,我可以在源文件中使用以下代码来获取较大对象的大小:size_tlargestSize=sizeof(largest::type);这正是我想要做的,但我需要最大的模板来处理两个以上的类——具体来说,它需要检查存储在中的所有类型boost::variant对象。我知道boost::variant有一个typestypedef,它定义了

c++ - 我可以确定 char * 参数寻址了多少有效内存吗?

我有这样的功能://stringisanull-terminatedchararray.ReplaceallainthestringwithbvoidReplaceCharInString(char*string,chara,charb){//loopoverthestringcharbychar,tofindall"a"sandreplacethemwith"b"}我正在做防御性编程。问题是客户端的实现回复真正传递了一个字符数组。如果传入单个字符的地址,程序肯定会进入错误状态(可能会崩溃)。我该如何检查并避免这种情况?(我知道如果我传入std::string对象,问题当然就消失了)