C++11 对 string的改变

元素保证是连续存储了
operator[]之类的不可以invalidate iterator了,于是COW不行了
不再是container所以swap不需要遵守不能copy/move/swap元素的规定,于是SSO可行了
reference不再是Allocator::reference了,而直接就是value_type&,不会是proxy了
s[s.size()]不管是不是const版本都是‘\0‘了
c_str()和data()变成一模一样的了,末尾总是会有‘\0‘
结合c_str()和opeartor[]的要求,基本上内部存储必须保证至少有size()+1的空间,不然给不出这个‘\0‘
c_str()/data()关于返回值在任何non-const成员函数调用后就失效的描述也没了,结合
iterator invalidation那部分的要求,operator[]/at/front/back/begin/end那一堆不会
导致c_str/data的返回值失效了,可以继续用

时间: 2024-10-24 23:48:45

C++11 对 string的改变的相关文章

2017.11.15 String、StringBuffer、StringBuilder的比较

参考来自:http://blog.csdn.net/jeffleo/article/details/52194433 1.速度 一般来说,三者的速度是:StringBuilder > StringBuffer > String. 但是,在String a = "how" + "old" + "are" + "you".这种直接拼接的情况下,String速度最高.这是因为jvm的优化问题,jvm会自动识别,把&quo

Java 11 - Java String类

Java String类 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串 创建字符串最简单的方式如下: String greeting = "Hello world!"; 在代码中遇到字符串常量时,这里的值是"Hello world!",编译器会使用该值创建一个String对象. 和其它对象一样,可以使用关键字和构造方法来创建String对象. String类有11种构造方法,这些方法提供不同

11.为String类扩展trim方法

1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 2 "http://www.w3.org/TR/html4/loose.dtd"> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"

C++11之右值引用(三):使用C++11编写string类以及&ldquo;异常安全&rdquo;的=运算符

前面两节,说明了右值引用和它的作用.下面通过一个string类的编写,来说明右值引用的使用. 相对于C++98,主要是多了移动构造函数和移动赋值运算符. 先给出一个简要的声明: class String { public: String(); String(const char *s); //转化语义 String(const String &s); String(String &&s); ~String(); String &operator=(const String

(11)温度仪表盘改变

if(n0.val>16) { n0.val=n0.val-1 } 原文地址:https://www.cnblogs.com/kekeoutlook/p/11623857.html

Java String类型值真的不可改变吗?

1.Java String 可以改变吗? 一直认为java 中String类型的值不能修改,主要是因为String是final的,而且里面没有设置值的set方法.但是可以通过反射机制改变值. 例1 public class Test { public static void main(String[] args) throws Exception { String s="0123456789"; System.out.println("改变前:s=" + s); F

C++11中的raw string literals

作为一名C++书看得少得可怜的新手,我一直没有勇气去系统地学习一下C++ 11添加的新特性.不过,平日里逛论坛,阅读大犇们的博客,倒是了解了一些.比如,这个帖子: 如何绕过g++ 4.8.1那个不能在宏里面使用R"(...)"的bug? 看到形如:R"" 这样的写法,相信学过Python的童鞋会感到似曾相识.Python支持所谓的“raw string”.Python文档这样介绍raw string: Both string and bytes literals m

2、C#面向对象:封装、继承、多态、String、集合、文件(上)

面向对象封装 一.面向对象概念 面向过程:面向的是完成一件事情的过程,强调的是完成这件事情的动作. 面向对象:找个对象帮你完成这件事情. 二.面向对象封装 把方法进行封装,隐藏实现细节,外部直接调用. 打包,便于管理,为了解决大型项目的维护与管理. 三.什么是类? 将相同的属性和相同方法的对象进行封装,抽象出 “类”,用来确定对象具有的属性和方法. 类.对象关系:人是类,张三是人类的对象. 类是抽象的,对象是具体的.对象可以叫做类的实例,类是不站内存的,对象才占内存. 字段是类的状态,方法是类执

Java笔记(12):常见对象String

1.String类的构造方法 1 package cn.itcast_01; 2 3 /* 4 * 字符串:就是由多个字符组成的一串数据.也可以看成是一个字符数组. 5 * 通过查看API,我们可以知道 6 * A:字符串字面值"abc"也可以看成是一个字符串对象. 7 * B:字符串是常量,一旦被赋值,就不能被改变. 8 * 9 * 构造方法: 10 * public String():空构造 11 * public String(byte[] bytes):把字节数组转成字符串 1