草庐IT

STL-string

全部标签

c++ - 在 C++ 中将 char 或 string 转换为 bitset

我正在做关于DES加密的作业,我似乎无法将字符串转换为位集,更不用说将char转换为位集了。谁能告诉我如何在C++中将单个字符转换为位集? 最佳答案 以下内容:charc='A';std::bitsetb(c);//implicitcasttounsignedlonglong应该可以。参见http://ideone.com/PtSFvz如果可能的话,将任意长度的string转换为bitset更难。位集的大小必须在编译时已知,因此实际上没有办法将字符串转换为一个。但是,如果您在编译时知道字符串的长度(或者可以在编译时绑定(bind)它

c++ - Visual Studio 下的 string::swap 复杂度

cppreference页面说std::basic_string::swap它具有恒定的复杂性。正如我所假设的那样,这意味着复制内容不会发生,只会发生指针交换或类似的情况。我写了一个测试代码并体验到它确实在VS2010下移动了内容。测试代码:std::strings1("almafa");std::strings2("kortefa");std::coutg++4.6.3上的输出s1.c_str():0x22fe028s2.c_str():0x22fe058SWAP!s1.c_str():0x22fe058s2.c_str():0x22fe028VS2010上的输出s1.c_str()

c++ - std::string 什么时候重新分配内存?

当使用std::string对象并且我想向它添加字符时,它会预先分配一些内存,还是只分配我需要的内存?准确地说:std::strings;s.reserve(20);charc='a';s="";for(inti=0;i在上面的例子中,我预留了一定量的内存。现在当我清除字符串时,是否会导致保留的内存被丢弃?在循环中它会填满预留内存然后每次重新分配额外的5个字符吗? 最佳答案 没有要求std::string在您分配一个空字符串给它时释放分配的内存。当您为其分配一个短字符串时也不会。唯一的要求是,当它分配内存以容纳更大的字符串时,分配必

c++ - set<string> 像数字一样排序

我尝试将字符串集作为数字进行排序。每个字符串长度可以达到50,它们实际上并不只是由数字组成。据我了解并在论坛中搜索,c++默认按字典顺序对字符串进行排序。有没有办法更改此默认行为以满足我的需要?我需要的是如下所示:setsolution;solution.insert("12X451");solution.insert("X23454");solution.insert("12345");solution.insert("12315");solution.insert("123111");solution.insert("5231");for(autos:solution){cout这

c++ - std::string 到 float (通过 std::stof)精度

我正在尝试解决这个问题,市场数据以字符串形式返回货币值,该字符串在数字长度后8位。money="124.19000540"我需要它是124.19,知道如何实现吗?std::stof(money)=124.19000244如何克服这个问题? 最佳答案 浮点类型不适合保存货币值。如果您满足于四舍五入到美分,并将钱存储为美分的整数(这是最简单的解决方案之一),您可以这样做:longnumCents=static_cast(100*std::stof(money))这将进行“截断”舍入,它总是向下舍入。如果您想“四舍五入到最接近的美分”,请

c++ STL map::operator []在被删除的条目上完成

std::mapbar;intfoo(intkey){bar.erase(key);return1;}intmain(){bar[0]=foo(0);return0;}这段代码是用GCC4.8编译的,在用电围栏检查内存使用情况时会出现段错误。LD_PRELOAD=libefence.so.0.0./a.out问题来自于编译器生成的代码开始在映射中分配一个新条目,然后执行foo()以获取要放入bar[的值0]。在运行foo()时,条目被销毁,代码最终通过写入未分配的内存结束。操作的排序方式取决于编译器实现,还是由C++当前标准指定? 最佳答案

c++ - 当 wordCount 中不存在键时,我应该对 unordered_map<string, int> 使用++wordCount[key] 吗?

见下面的代码:unordered_mapwordCount;for(stringword:words)++wordCount[word];问题:当wordCount中不存在word时,是否可以使用++wordCount[word];?我总是看到有人这样使用,但我不太确定。说明here说:Ifkdoesnotmatchthekeyofanyelementinthecontainer,thefunctioninsertsanewelementwiththatkeyandreturnsareferencetoitsmappedvalue.Noticethatthisalwaysincreas

c++ - glGetShaderInfoLog 到 std::string?

这是OpenGLSuperBible第7版的片段:GLintlog_length;glGetShaderiv(fs,GL_INFO_LOG_LENGTH,&log_length);std::stringstr;str.reserve(log_length);glGetShaderInfoLog(fs,log_length,NULL,str.c_str());乍一看,将str.c_str()作为参数传递给这个函数似乎很奇怪,当然clang立即抗议:cannotinitializeaparameteroftype'GLchar*'(又名“char*”),右值类型为“constchar*”。

c++ - 删除元素后 std::string 容量保持不变,那么它是否占用了一些内存?

下面这段代码:stringa="abc";cout...输出:33即使我从字符串中删除一些元素,容量也保持不变。所以我的问题是:是否有一些内存因为容量问题而被占用?如果我没有明确地reserve()怎么办?如果我使用reserve()并且没有用完整个容量,我是不是在浪费内存?如果需要,这些额外的内存(我没有使用)是否会分配给其他东西?编辑:假设我有stringa="something";a="ab";现在我知道a永远不会超过两个字符。那么调用reserve(2)这样内存就不会被浪费是明智的吗? 最佳答案 我先回答你的问题:内存属于字

c++ - 使用自定义类的 C++ STL 映射的运算符重载

我对在C++中使用STLmap有疑问。我知道将map与自定义类一起使用我需要重载“#include#includeusingnamespacestd;structbox{inte,s,w;box():e(-1),s(-2),w(-3){}booloperatorhashtable;boxb;hashtable[b]=1;return0;}在这里,我非常简单地重载了booloperator还有其他方法。所以我的问题是,这样做,重载我在这里的唯一动机是存储成对的box和int(请参阅main函数),以便我可以在O(log(n))时间内访问它们。更新我认为有一个糟糕的比较器不会影响map的访