草庐IT

heap_string_malloc

全部标签

c++ - double to hex string & hex string to double

我要做的是将double字符串转换为十六进制字符串,然后再转换回double。以下代码将double字符串转换为十六进制字符串。char*double2HexString(doublea){char*buf=newchar[17];//doubleis8-bytelong,sowehave2*8+terminating\0char*d2c;d2c=(char*)&a;char*n=buf;inti;for(i=0;i这似乎可行,但是,我不确定如何将生成的字符串转换回double字符串。请指教:) 最佳答案 我很惊讶地看到没有人提出标

c++ - 我们应该删除一个不是 new/malloc 的指针吗?

classClassA{public:ClassA(ClassB*p)b(p){}~ClassA(){deleteb;}ClassB*b;};这样的设计好吗? 最佳答案 答案是视情况而定。您必须明确谁负责对象的生命周期。此外,ClassA缺少用户定义的复制构造函数和赋值运算符,这可能会导致未定义的行为。例如:ClassAobject1(newClassB());//object1takesownershipoftheobjectClassAobject2(object1);//object2takesownershipofthesa

c++ - 警告 C4172:返回对绑定(bind)到局部变量的 const std::string 的引用。它有多安全?

我刚刚在工作中构建我们的一个项目,我看到添加了一个新功能:conststd::string&ClassName::MethodName()const{return"";}编译器给出警告:WarningC4172:returningaddressoflocalvariableortemporary我认为编译器是对的。这个函数的安全性如何?请注意,该函数不会返回constchar*,这没有问题,因为字符串文字具有静态存储持续时间。它返回对conststd::string的引用 最佳答案 是的,它不安全。返回局部变量或临时变量的地址并取消

c++ - sort_heap 存在的原因

在浏览标准库中鲜为人知的部分时,我偶然发现了std::sort_heap。但我不明白为什么它存在,因为有一个名为std::sort的免费函数。另请注意,复杂度是相同的。那么,我的问题是:sort_heap存在的理由是什么? 最佳答案 sort_heap假设输入已经是heap的形式.这意味着它在理论上可以比std::sort更有效地工作,因为对输入的顺序有一些限制(不像std::sort,它必须适用于所有输入)。正如评论中提到的,值得注意的是,这些性能优势无法得到保证,并且显然取决于输入数据,因此如果性能很重要,那么就没有办法绕过分析

vue前端判断某一个String类型的集合中是否包含某一个字符串怎么做

vue前端判断某一个String类型的集合中是否包含某一个字符串怎么做可以使用JavaScript中的字符串方法includes()来判断某一个字符串是否包含在另一个字符串中。具体的实现方法如下:conststrList=["hello","world","vue"];//假设这是一个字符串类型的集合consttargetStr="vue";//假设这是需要判断是否包含的字符串if(strList.includes(targetStr)){console.log("字符串集合中包含目标字符串");}else{console.log("字符串集合中不包含目标字符串");}在上面的代码中,我们使用

c++ - 当字符串可以是大写或小写时,C++ 中是否有用于 std::string 的内置函数来按字母顺序比较两个字符串?

我知道对于C++,如果两个词完全小写或完全大写,基本的比较运算符就可以完成任务。我有一个字符串数组,字母可以从低到高变化。这是我可以使用的字符串类型的一个小示例:“丰盛的生命”“新生命WMNMNSTRY”“新生活大会”我知道在Java中存在函数String.compareToIgnoreCase().是否有此函数的C++等效项? 最佳答案 我不知道标准库中有任何不区分大小写的函数,但您可以为std::equal指定自定义谓词:std::stringa("hello");std::stringb("HELLO");std::cout有

c++ - 为什么不能将一个 int(代表一个 ASCII 字符)转换为一个 std::string 而不用花括号包裹 int?

intmain(){std::stringA;A+=(std::string)65;std::cout上面的代码不起作用。它会引发编译器错误。但是下面的代码有效。intmain(){std::stringA;A+=(std::string){65};std::cout当我将65括在大括号中时,它被解释为我想要的ASCIIA,但没有大括号,程序将无法运行。我还尝试将多个数字放在大括号中,如下所示:intmain(){std::stringA;A+=(std::string){65,66};std::cout这将打印出AB。我只希望有人能为我解决这个问题。 最佳

c++ - 标准模板字符串类 : string. fill()

我需要一种方法来创建一个包含n个字符的字符串。在这种情况下,ascii值为零。我知道我可以通过调用构造函数来做到这一点:字符串sTemp(125000,'a');但我想在很多地方重用sTemp并用不同的长度填充它。我正在调用一个以字符串指针和长度作为参数并用字节填充字符串的库。(我知道从技术上讲,字符串不是连续的,但就所有意图和目的而言,它是连续的,并且很快就会成为标准)。我不想使用vector。有没有什么巧妙的方法可以在创建字符串后再次调用构造函数? 最佳答案 string类提供了方法assign来为给定的字符串分配一个新值。签名

c++ - 为什么不是 std::string::max_size() == std::string::allocator::max_size()

最近我注意到给定std::strings的情况下以下陈述不正确.s.max_size()==s.get_allocator().max_size();我发现这很有趣,默认情况下std::string将使用std::allocator其理论极限为size_type(-1)(是的,我知道我假设2的补码,但这与实际问题无关)。我知道实际限制会比这少得多。在典型的32位x86系统上,内核将占用2GB(可能是1GB)的地址空间,实际上限要小得多。无论如何,GNUlibstdc++的std::basic_string::max_size()似乎返回相同的值,不管它使用的分配器说什么(类似于1073

c++ - std::string 的每个字符的地址

我试图打印std::string的每个字符的地址。但是我不明白std::string内部发生了什么,这导致了这个输出,而对于数组,它给出了我预期的地址。有人可以解释一下发生了什么吗?#include#includeusingnamespacestd;intmain(){stringstr="Hello";inta[]={1,2,3,4,5};for(inti=0;i输出:Helloellolloloo**************0x7fff5fbff9500x7fff5fbff9540x7fff5fbff9580x7fff5fbff95c0x7fff5fbff960