我在C++程序中处理巨大的(最多2GB)字符串及其切片。C风格的字符串在这种情况下似乎不可靠,但可以简单地切片(末尾没有'\0')。另一方面,据我所知,std::string::substr复制切片,因此我应该为每个索引执行至少一个额外的加法操作(索引+基数),以保持合理的内存使用。 最佳答案 最通用的解决方案是创建一个切片对象,使用您需要的界面,然后使用它。切片对象可以包含两个迭代器,开始和结束。 关于c++-如何以更少的开销管理字符串切片?,我们在StackOverflow上找到一个
析构函数是否在std::map上被调用?std::map::clear时的元素用来?我尝试调试std::map但看不到std::string析构函数被调用。任何人都可以帮助我理解吗?文档说明它被调用了,但我没有注意到它。 最佳答案 文档是正确的,它确实被调用了。销毁将通过方法std::allocator::deallocate()完成。.在调试器中跟踪它。http://www.cplusplus.com/reference/std/memory/allocator/ 关于c++-std:
我有一个模拟窗口的程序;所以我将窗口的内容存储在成员数据content中,它是std::string类型:classWindow{usingtype_ui=unsignedint;public:Window()=default;Window(type_ui,type_ui,char);voidprint()const;private:type_uiwidth_{};type_uiheight_{};charfill_{};std::stringcontent_{};mutabletype_uitime_{};};Window::Window(type_uiwidth,type_uihe
不能转发声明std::string和std::wstring的问题经常被讨论。据我了解,原因是这些类型是模板类basic_string实例化的类型定义:namespacestd{typedefbasic_stringstring;typedefbasic_stringwstring;}并且该语言不允许typedef的前向声明。使用继承而不是typedef对于c++标准来说不是更好吗:namespacestd{classstring:publicbasic_string{};classwstring:publicbasic_string{};}这样我们就可以转发声明std::string
这previouslyansweredquestion解释了为什么我在下面发布的代码不起作用。我有一个后续问题:是否有一种概念上等效的解决方法,即实现编译时字符串连接,但以C++11实际支持的方式实现?使用std::string完全不是必需的。constexprstd::stringfoo(){returnstd::string("foo");}constexprstd::stringbar(){returnstd::string("bar");}constexprstd::stringfoobar(){returnfoo()+bar();} 最佳答案
我有以下问题。我正在尝试将我编写的大型代码与Qt界面集成。我的一些函数返回std::string。我没有成功地让QLineEdit::setText接受它们(其他返回char的函数不会给我带来问题)。我该怎么办?谢谢!朱塞佩 最佳答案 试试这个:std::stringa="aaa";lineEdit->setText(QString::fromStdString(a));您将需要支持STL的Qt。 关于c++-如何在QLineEdit中使用std::string?,我们在StackOve
我正在尝试比较两个std::strings,并确定字符串A是否与字符串B相同,但插入或删除了单个字符。否则返回假。例如:“start”和“strt”或“ad”和“add”目前:if(((sizeA-sizeB)!=1)&&((sizeB-sizeA)!=1)){returnfalse;}if(sizeA这可以完美地工作,但是gprof告诉我这个功能陷入了困境。我尝试将for循环转换为使用迭代器来访问字符,但这使我的运行时间增加了一倍。我将它缩小到我对std::string.substr()的使用,因为每次stringA和stringB的大小相差1时它都会构造新的字符串。当第一个字符不同
有时您需要用C函数构造的字符填充std::string。一个典型的例子是这样的:constexprstaticBUFFERSIZE{256};charbuffer[BUFFERSIZE];snprint(buffer,BUFFERSIZE,formatstring,value1,value2);returnstd::string(buffer);注意我们首先需要填充本地缓冲区,然后将其复制到std::string。如果计算了最大缓冲区大小并且不一定要存储在堆栈中的内容,则该示例会变得更加复杂。例如:constexprstaticBUFFERSIZE{256};if(calculated
如果我想构造一个std::string,其中一行如下:std::stringmy_string("a\0b");我想在结果字符串中包含三个字符(a、null、b),但我只得到一个。什么是正确的语法? 最佳答案 自C++14起我们已经能够创建literalstd::string#include#includeintmain(){usingnamespacestd::string_literals;std::strings="pl-\0-op"s;//C++14之前问题是std::string采用constchar*的构造函数假定输入是
我想有效地比较一个QString和一个std::string是否相等。哪种方法最好,而且可能无需创建中间对象? 最佳答案 QString::fromStdString()和QString::toStdString()浮现在脑海中,但它们会创建字符串的临时拷贝,所以afaik,如果你不这样做如果不想拥有临时对象,您将不得不自己编写此函数(尽管效率更高是个问题)。例子:QStringstring="string";std::stringstdstring="string";qDebug()顺便说一句,在qt5中,QString::toS