草庐IT

string.format

全部标签

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

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

c++ - Windows 上的慢速 std::string 连接

我有一个程序需要将许多字符串连接在一起(更准确地说是将整数转换为字符串)。在我的Ubuntu机器上(运行g++7.3.0),代码运行时间为1.5秒。但是代码也需要在Windows上运行(使用MinGW运行g++6.3.0),需要15秒才能完成。此外,Ubuntu设置在使用i7-4712MQCPU@2.30GHz的慢得多的笔记本电脑上运行,而Windows机器在i7-7700KCPU@4.20GHz上运行。重现时间的代码如下所示。我用g++tester.cpp-O2-otester(或tester.exeforwindows)编译代码#include#includeintmain(int

c++ format cout with "right"and setw() for a string and float

我正在尝试格式化一个“cout”,它必须显示如下内容:Result$34.45金额($34.45)必须在右侧索引上,并带有一定数量的填充或在特定列位置结束。我尝试使用cout但是,它是为“$”字符串设置宽度,而不是为字符串加金额设置宽度。关于处理此类格式有什么建议吗? 最佳答案 您需要将"$"和值34.45组合成单独的字符串。像这样尝试:#include#include#include#includeusingnamespacestd;intmain(){stringstreamss;ss

C++初阶:初识STL、String类接口详细讲解(万字解析)

上次介绍完了模版和泛型编程:C++初阶:入门泛型编程(函数模板和类模板)今天开始stl的内容了文章目录1.STL介绍1.1概念(标准模板库)1.2版本问题(主流有4个)1.3STL六大组件2.string类的基本介绍3.string类对象的构造(构造函数)4.访问及遍历操作4.1operator[]([]加下标)4.2基于范围for4.3使用迭代器(最推荐使用)5.string的迭代器(Iterator)5.1介绍5.2begin()和end()(正向和常正向)5.3rbegin()和rend()(反向和常反向)6.string类对象的容量操作6.1size和length6.2capacity

c++ - 以编程方式确定 std::string 是否使用写时复制 (COW) 机制

根据这个question的讨论,我想知道使用nativeC++的人如何以编程方式确定他们正在使用的std::string实现是否利用Copy-On-Write(COW)我有以下功能:#include#includeboolstdstring_supports_cow(){//makesurethestringislongerthanthesizeofpotential//implementationofsmall-string.std::strings1="012345678901234567890123456789""012345678901234567890123456789""0

c++ - 我应该在 ATL/WTL 中使用 CString、basic_string<TCHAR> 还是其他东西?

我这几天只学了一点ATL(在意识到纯Win32有多痛苦之后),也学了WTL和MFC,据我所见,有很多不同的字符串我可以上课。我曾经做过这样的事情:#include#includenamespacestd{typedefbasic_string_tstring;}然后在我的代码中到处使用_tstring。在学习了一些ATL之后,我了解到在atltmp.h中有一个CString类。显然,在WTL中还有另一个CString类,在MFC中还有一个CString类。我不知道是继续使用ATL还是转而使用WTL、MFC或其他软件。但是现在,我正在将我的Win32代码转换为ATL,我不确定要更改什么以

c++ - C strings vs const char* 让我感到困惑......请帮忙

我是一名C/C++初学者,试图构建一个看似非常简单的程序:它将文件加载到C字符串(constchar*)中。然而,尽管该程序非常简单,但它并没有按照我理解的方式工作。看一看:#include#includestd::stringloadStringFromFile(constchar*file){std::ifstreamshader_file(file,std::ifstream::in);std::stringstr((std::istreambuf_iterator(shader_file)),std::istreambuf_iterator());returnstr;}cons

c++ - 为什么 std::basic_string 不支持通过表达式模板进行连接?

Qt的QString可以通过operator%连接起来,它使用表达式模板预先计算结果字符串的大小并优化对operator+的多个链式调用.参见thisquestionofmine了解更多信息。为什么std::basic_string没有采用类似的结构?C++11甚至允许这样做吗?我只看到优点,很明显,库实现者可以在需要时破坏ABI兼容性(C++11甚至为libstdc++提供了一个很好的理由)。 最佳答案 因为没有人提出标准;除非有人提出建议,否则它不会进入。还因为它可能会破坏现有代码(如果他们使用operator+就是这样)。此外

c++ - char * 和 const_cast<char*>(string.c_str()) 有什么区别

我使用外部库来处理两个应用程序之间的udp(OSC)通信。为了格式化将要发送的消息,库需要一个char*但我从UI中得到一个字符串,我必须转换它。当我处理代码的其他部分时,udp部分是硬编码的:char*endofMess="fromsetEndMess";并且工作正常。我认为使用我的字符串很容易让它工作并写道:std::strings="fromsetEndMess";char*endofMess=const_cast(s.c_str());但与第一个例子不同,我收到的消息格式正确,现在我只收到乱码。有人知道它可能来自哪里吗?谢谢!马修编辑:我使用的代码:每次OSCVal发送消息的方

c++ - 读取 std::string,从 std::string 中删除所有特殊字符

我是这个论坛和c++的新手。所以请原谅我的疑惑/问题。我正在尝试读取std::string。我知道我可以使用at或[int]运算符访问元素。我有2个问题:1)删除或删除字符串中的所有特殊字符(包括空格)2)只读取该字符串的前4个字符或字母对于1),我正在检查std::erase和std::remove_if,但我也需要消除所有特殊字符和空格。这意味着我需要包括isspace()/isalpha()等所有条件。没有单一的方法可以一次全部删除吗?对于2),我可以像访问数组一样访问字符串,我的意思是string[0]、string[1]、string[2]、string[3]。但是我不能将它