首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++ std::string

C++ 在其定义中有一种将字符序列表示为 class 对象方法。这个类叫做 std::stringString 类将字符存储为具有允许访问单字节字符功能字节序列。 ...实现字符数组是快比std :: string。与实现相比,字符串比字符数组慢。 字符数组不提供很多内置函数来操作字符串。String 类定义了许多允许对字符串进行多种操作功能。...3. pop_back()  :- 从 C++11 引入(用于字符串),该函数用于删除字符串最后一个字符。...pos)  :- 该函数复制其参数中提到目标字符数组子字符串。...它需要 3 个参数,目标字符数组,要复制长度和开始复制字符串起始位置。 13. swap()  :- 该函数将一个字符串与另一个字符串交换**。

1.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

std::string继承之番外篇

群里经常有这样一个现象,当有新人进群时候,总会有个面试环节,经常问一个问题就是std::string能否被继承,一开始可能是技术问题,后面多了,就被玩成了梗,不过梗归梗,今天借助这篇文章,聊聊继承相关...override 记得之前在实现某个功能时候,发现预期输出与实际输出不相符,查了好久,最后才发现,在继承类声明和定义虚函数与父类不是一个 通常情况下,我们会像如下这样写代码: class Base...emm,这是因为void f()和void f() const是两个不同类型函数,子类定义void f() const并没有覆盖父类void f(),这就是上面指向子类指针调用输出是父类函数原因...回到我们文首那道题目:std::string能否被继承,如果时间在2008年的话,单纯针对这个问题,我可能会回答是,如果是现在的话,可能会犹豫,毕竟Modern C++中新关键字final出现,称其为继承终结者也不为过哈哈...不过,看了gcc11.2源码,也尝试在本地对std::string继承尝试了下,是可以(此处仅针对能否继承,撇开内存泄漏等其它因素哈)。

25610

如何把std::string当char *使用?

std::string使用很方便,但有时会碰到这样问题,比如我们有一个结构体,内容如下所示: typedef struct _datainfo {     int i;     unsigned time...; } DATAINFO; DATAINFO stInfo; stInfo.i = 10; stInfo.time = time(NULL); 如果要把这个结构体内容保存到一个string,通常作法是什么呢...(char *)buf); 其实我们忽略了一点,就是string也是用char *来保存数据内容,而c_str()接口就返回了这个头指针。...与普通字符串不同是,它长度并不是以/0结尾去判断,而是通过成员变量里size决定,知道了这一样,我们就可以把string当char *来使用了。...(stInfo)); 这样就可以实现了,知道了这一点,我们就可以用string干更多事情,要注意就是在每次内容修改之前,要进行resize成新大小。

53130

C++踩坑记录(一)std:;string析构

越学C++越觉得自己菜了 之前写服务端程序有一个往消息队列里面推json过程,然后发现推进去C#端取到无论如何都是个空指针 简单复现一下现场 string str1 = string("hello1..."); string str2 = string("hello2"); const char* ptr1 = str1.substr(1).data(); // 取字符串从下标1到结尾部分 const...执行到到了下一行时候,存储str1子串字符串对象被析构,msvc发现这是个临时对象,代码块还没结束十好几就把内存析构掉,临时对象内存被释放,同时str2.substr(1),这个时候新临时变量被注册到刚才...str1.substr(1)被析构掉内存地址上面,此时再去调用data(),拿到了ptr1同一个地址指针,此时内存数据变更为s2子串,然后压到消息队里面的数据穿就乱了,当我把程序增加一个临时string...去接收上面产生子串时候,问题就会解决了 string str1 = string("string1"); string str2 = string("string2"); string t_str1

2.1K20

C++17新特性之std::string_view

如果生成std::string无需进行修改操作,可以把std::string转换为std::string_view,std::string_view记录了对应字符串指针和偏移位置,无需管理内存,相对...,我们以执行1000000次为例,std::string因为操作过程,会重新分配内存,生成一个对应std::string副本,用时1065ms,std::string_view不持有字符串拷贝,与源字符串共享内存空间...此外,std::stringsubstr是线性复杂度,依赖于字符串长度, std::string_viewsubstr是常数复杂度,不依赖于字符串长度,std::string_viewsubstr...性能优于std::stringsubstr....std::string_view并不持有字符串内存,所以它生命周期一定要比源字符串生命周期长,源字符串被消毁,行为未定义。

3.4K50

C++std::move()

std::move()是 C++ 标准库一个函数模板,用于将对象转换为右值引用,以便支持移动语义。它位于 头文件,并且是移动语义关键工具之一。...使用 std::move() 后,对象状态可能会发生改变,即资源所有权可能会被移动到其他对象或被销毁。...在移动语义,被移动对象状态应该处于有效但不确定状态,即不应该假设对象仍然保持其原有的值。 被移动后对象通常不应该再被使用,除非它们经过了重新构造或赋值操作。...std::cout << str1.data << std::endl; // str1.data 为 nullptr return 0; } 在上述示例,我们定义了一个简化版 MyString...在 main() 函数,我们创建了一个 str1 对象,并将其作为参数传递给 std::move(),将其转换为右值引用。

53030

C++std::variant用法详解

在 C++17 引入了一个非常有用类型 std::variant,它属于 C++ 标准库 头文件。...std::variant 是一个类型安全联合体,可以存储固定集合任意类型值。这使得 std::variant 成为处理那些可能需要存储不同类型数据情况理想选择。...a string." << std::endl; } 使用 std::get_if std::get_if 提供了一种安全方式来尝试获取 std::variant 存储值,而不会抛出异常。...< std::endl; } 类型冲突 在使用 std::variant 时需要注意,如果存储类型有可能在语义上重叠或不明确(比如 std::variant),就需要特别注意操作和类型检查准确性...在不确定 std::variant 存储具体类型时,使用 std::get_if 或在 std::visit 处理所有可能类型。

13010

C++std::transform()

在 C++ 标准库std::transform() 是一个非常有用算法函数,它能够将给定范围每个元素进行变换,并将变换后结果存储到另一个范围。...std::transform() 函数接受四个参数:两个表示输入范围起始迭代器、一个表示输出范围起始迭代器和一个可调用对象(即操作函数)。...9 16 25 在这个示例,我们定义了一个名为 Square 函数对象,并重载了圆括号操作符,使其可以像函数一样调用。...总结一下,std::transform() 是一个功能强大算法函数,可用于对容器元素进行变换操作。...通过传递操作函数到 std::transform() ,我们可以避免手动编写循环,并且能够方便地在不同容器之间进行元素转换。

40730
领券