网站建设要考虑哪些方面,丽江建设工程信息网站,单位如何申请域名,北京seo网络优化师std::string是C标准库中的一个基本类模板#xff0c;专门用于处理字符串。它提供了一个可变长度的字符序列#xff0c;以及一系列用于字符串操作的方法。std::string是值类型#xff0c;这意味着当它作为函数参数传递或赋值时#xff0c;整个字符串数据会被复制。
std::st…std::string是C标准库中的一个基本类模板专门用于处理字符串。它提供了一个可变长度的字符序列以及一系列用于字符串操作的方法。std::string是值类型这意味着当它作为函数参数传递或赋值时整个字符串数据会被复制。
std::string的特性
可变长度std::string可以动态地调整大小以存储不同长度的字符串随机访问std::string可以通过索引随机访问字符自动内存管理无需手动管理内存std::string会自动分配和释放内存模板类std::string是一个模板类但通常用于char类型的字符串
std::string对象通常包含了一个指向堆上分配的内存的指针用于存储较长的字符串。较短的字符串可能会直接存在对象本身的内部缓冲区有些实现还会使用一个独立的缓冲区来存储字符串内容。
std::string提供了一系列成员函数来操作对象 构造函数 std::string()默认构造一个空字符串 std::string(const char* str)从C风格字符串构造 std::string(const std::string str)拷贝构造函数深拷贝 std::string str abc12345; // 创建一个字符串并进行初始化
std::cout str std::endl; // abc12345std::string new_str1(str); // 拷贝构造深拷贝
std::cout str std::endl; // abc12345
std::cout new_str1 std::endl; // abc12345std::string new_str2(std::move(str)); // 移动构造
std::cout str.size() std::endl; // 0
std::cout new_str2 std::endl; // abc12345std::string str abc12345; // 创建一个字符串并进行初始化
const char* cstr str.c_str(); // c_str()返回指向字符串第一个字符的指针
std::cout *cstr std::endl; // a
std::cout cstr std::endl; // abc12345c_str()返回的指针指向的是一个只读的C风格字符串这意味着不能通过这个指针来修改std::string对象中字符串的内容。赋值操作 赋值运行符 将一个字符串的内容复制给另一个字符串 swap(std::string other)交换两个字符串的内容 std::string str abc12345; // 创建一个字符串并进行初始化std::string new_str str; // 赋值操作深拷贝
std::cout str std::endl; // abc12345
std::cout new_str std::endl; // abc12345std::string swap_str 678;
str.swap(swap_str); // 交换两个字符串
std::cout str std::endl; // 678
std::cout swap_str std::endl; // abc12345连接字符串 operator 连接两个字符串 operator 将另一个字符串连接到当前字符串 std::string str abc12345; // 创建一个字符串并进行初始化
std::string new_str 678;std::string conn_str str new_str; // 连接字符串
std::cout conn_str std::endl; // abc12345678访问字符 operator[]通过索引访问字符串中的字符 at(size_type n)通过索引访问字符串中的字符带边界检查 front()返回字符串中的第一个字符 back()返回字符串中的最后一个字符 std::string str abc12345; // 创建一个字符串并进行初始化
std::cout str[1] std::endl; // 访问索引为1的字符b
std::cout str.at(7) std::endl; // 访问索引为7的字符5
std::cout str.front() std::endl; // 返回第一个字符a
std::cout str.back() std::endl; // 返回最后一个字符5查找和替换 find()在字符串中查找子字符串或字符 replace()替换字符串中的部分内容 std::string str abc12345cba; // 创建一个字符串并进行初始化
std::cout str.find(b) std::endl; // 查找字符串中从左到右的第一个字符b并返回其索引1
std::cout str.rfind(b) std::endl; // 查找字符串中从右到左的第一个字符b并返回其索引9
std::cout str.find(abc) std::endl; // 查找字符串中的子字符串返回其开头索引0
std::cout str.find(abcd) std::endl; // 若查找不到子字符串或字符则返回一个随机数18446744073709551615str.replace(3, 5, 321); // 从索引为3的字符开始将5个字符换成321
std::cout str std::endl; // abc321cba修改字符串 push_back(char ch)在字符串末尾添加一个字符 pop_back()移除字符串末尾的字符 append(std::string other)在字符串末尾添加一个字符串 erase()删除字符串中的指定位置或指定范围的字符 assign(std::string other)用新的字符串替换原有内容 insert()在指定位置插入字符或字符串 resize()修改字符串的大小 clear()清空字符串 std::string str abc12345; // 创建一个字符串并进行初始化str.push_back(A); // 字符串末尾添加一个字符
std::cout str std::endl; // abc12345Astr.pop_back(); // 移除字符串末尾的字符
std::cout str std::endl; // abc12345str.append(678A); // 字符串末尾添加字符串
std::cout str std::endl; // abc12345678Astr.erase(5); // 删除字符串中索引为5及以后的字符
std::cout str std::endl; // abc12
str.erase(1, 3); // 删除字符串中索引从1开始的3个字符
std::cout str std::endl; // a2str.assign(678); // 用新的字符串替换掉原来的字符串
std::cout str std::endl; // 678str.clear(); // 清空字符串
std::cout str.size() std::endl; // 0子字符串 substr()提取子字符串 std::string str abc12345; // 创建一个字符串并进行初始化
std::string sub_str str.substr(2, 4); // 提取从索引2开始共4个字符的子字符串
std::cout sub_str std::endl; // c123容量 length()返回字符串的长度 size()返回字符串中的字符数量也就是字符串长度 capacity()返回字符串的容量 reserve()更改容量 std::string str abc12345; // 创建一个字符串并进行初始化
std::cout str.length() std::endl; // 8
std::cout str.size() std::endl; // 8
std::cout str.capacity() std::endl; // 15str.push_back(6);
std::cout str.capacity() std::endl; // 15str.reserve(20); // 更改容量容量会变得更大但不一定是给出的值因为容量的变化是按照指数或线性规律来的
std::cout str.capacity() std::endl; // 31长度表示字符串当前实际包含的字符数而容量表示分配给字符数组的内存空间大小。当字符串的长度超过容量时std::string会重新分配更大的内存空间并将原有的字符复制到新的内存位置。当std::string对象的生命周期结束时它会自动释放所分配的内存不需要手动调用delete或free()释放字符串的内存因为std::string类会在对象销毁时自动调用相应的析构函数来释放内存。与C语言中的字符串类似std::string的底层实现也会在字符数组的末尾添加一个空终止字符‘\0’以表示字符串的结束。这样可以使得std::string类的接口与标准C字符串函数兼容但是std::string的size()和length()不会统计\0。迭代器 begin()返回指向第一个字符的迭代器 end()返回指向尾后一位的迭代器 std::string str abc12345; // 创建一个字符串并进行初始化
for (auto it str.begin(); it ! str.end(); it) {std::cout *it std::endl; // a b c 1 2 3 4 5
}
for (auto value : str) {std::cout value std::endl; // a b c 1 2 3 4 5
}其他成员函数 data()返回指向字符串第一个字符的指针c_str()返回指向字符串第一个字符的指针empty()检查字符串是否为空