当前位置: 首页 > news >正文

C++容器string

C++容器string

  • 定义
    • std::string (char)
    • std::wstring (wchar_t)
    • std::u8string (char8_t) (C++20引入)
    • std::u16string (char16_t)
    • std::u32string (char32_t)
  • 构造函数
    • 1、无参构造函数
    • 2、基于C语言字符串
    • 3、基于C语言字符串前面几个
    • 4、拷贝构造函数
    • 5、移动构造函数
    • 6、基于字符和重复次数构造函数
    • 7、迭代器范围构造函数
    • 8、初始化列表构造函数
  • 赋值操作
    • 1、运算符赋值
    • 2、方法赋值
  • 元素访问
    • 1、下标访问
    • 2、首尾元素访问
    • 3、C语言风格访问
  • 容量大小
    • 1、容量大小查询
    • 2、容量大小改变
    • 3、短字符串优化(SSO)
  • 修改操作
    • 1、拼接操作
    • 2、插入操作
    • 3、删除操作
    • 4、替换操作
    • 5、交换移动
  • 查找操作
  • 截取操作
  • 比较操作
    • 1、运算符比较
    • 2、方法比较
  • 迭代器操作

定义

https://cppreference.cn/w/cpp/string/basic_string
std::string 是 std::basic_string<char> 的 typedef

类型定义
std::stringstd::basic_string
std::wstringstd::basic_string<wchar_t>
std::u8string (C++20)std::basic_string<char8_t>
std::u16string (C++11)std::basic_string<char16_t>
std::u32string (C++11)std::basic_string<char32_t>
std::pmr::string (C++17)std::pmr::basic_string
std::pmr::wstring (C++17)std::pmr::basic_string<wchar_t>
std::pmr::u8string (C++20)std::pmr::basic_string<char8_t>
std::pmr::u16string (C++17)std::pmr::basic_string<char16_t>
std::pmr::u32string (C++17)std::pmr::basic_string<char32_t>
_EXPORT_STD using string  = basic_string<char, char_traits<char>, allocator<char>>;
_EXPORT_STD using wstring = basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t>>;
#ifdef __cpp_lib_char8_t
_EXPORT_STD using u8string = basic_string<char8_t, char_traits<char8_t>, allocator<char8_t>>;
#endif // defined(__cpp_lib_char8_t)
_EXPORT_STD using u16string = basic_string<char16_t, char_traits<char16_t>, allocator<char16_t>>;
_EXPORT_STD using u32string = basic_string<char32_t, char_traits<char32_t>, allocator<char32_t>>;

新项目优先使用UTF-8( C++20使用 std::u8string;C++20 前使用 std::string 存储 UTF-8)

类型字符大小编码主要使用场景可移植性内存效率
string1字节,无前缀或u8前缀(C++11起)本地/UTF-8通用、网络、文件高(ASCII)
wstring2/4字节,使用L前缀系统相关Windows API中等
u8string1字节,使用u8前缀UTF-8现代UTF-8处理, C++20 起处理 UTF-8 的标准选择
u16string2字节,使用u前缀UTF-16Qt、Windows、Java 交互中等中等
u32string4字节,使用U前缀UTF-32Unicode 处理、算法

std::string (char)

注意存放中文字符(或表情字符)的时候,一个汉字占用多个字符,遍历的时候需要特殊处理,否则跟Java一样需要通过codepoint来处理
字符类型char (通常8位,有符号或无符号取决于实现)
编码:

  • 传统上用于 ASCII 或本地编码(如 GB2312、Shift-JIS)
  • 现代实践中常用于 UTF-8 编码
  • C++20 引入 char8_t 后,UTF-8 应优先使用 u8string
    内存: 每个字符1字节
	std::string str1 = "Hello World";std::cout << "str1 length: " << str1.length() << " >> " << str1.size() << std::endl;std::string str2 = "Hello 张三";std::cout << "str2 length: " << str2.length() << " >> " << str2.size() << std::endl;// 这里遍历中文字符比较诡异for (auto it = str2.begin(); it != str2.end(); it++){std:cout << "->>" << *it << endl;}

std::wstring (wchar_t)

字符类型wchar_t (长度由具体系统决定)
编码:

  • Windows: UTF-16 (2字节或4字节,通常是2字节)
  • Linux/Unix: UTF-32 (4字节)
  • macOS: UTF-32 (4字节)
    内存:
  • Windows: 通常2字节/字符
  • 其他系统: 通常4字节/字符
	std::wstring str1 = L"Hello World";std::cout << "str1 length: " << str1.length() << " >> " << str1.size() << std::endl;std::wstring str2 = L"Hello 张三";std::cout << "str2 length: " << str2.length() << " >> " << str2.size() << std::endl;

std::u8string (char8_t) (C++20引入)

字符类型char8_t (8位无符号)
编码严格 UTF-8
内存: 每个字符1字节(但一个 Unicode 码点可能占用1-4个字节)

	std::u8string str1 = u8"Hello World";std::cout << "str1 length: " << str1.length() << " >> " << str1.size() << std::endl;std::u8string str2 = u8"Hello 张三";std::cout << "str2 length: " << str2.length() << " >> " << str2.size() << std::endl;

std::u16string (char16_t)

字符类型char16_t (16位无符号)
编码UTF-16
内存: 每个字符2字节(基本多文种平面 BMP 字符占1个单元,辅助平面字符占2个单元 - 代理对

std::u16string str1 = u"Hello World";
std::cout << "str1 length: " << str1.length() << " >> " << str1.size() << std::endl;std::u16string str2 = u"Hello 张三";
std::cout << "str2 length: " << str2.length() << " >> " << str2.size() << std::endl;

std::u32string (char32_t)

字符类型char32_t (32位无符号)
编码UTF-32
内存: 每个字符4字节(每个 Unicode 码点正好占用1个字符单元)

	std::u32string str1 = U"Hello World";std::cout << "str1 length: " << str1.length() << " >> " << str1.size() << std::endl;std::u32string str2 = U"Hello 张三";std::cout << "str2 length: " << str2.length() << " >> " << str2.size() << std::endl;

构造函数

https://cppreference.cn/w/cpp/string/basic_string/basic_string

1、无参构造函数

std::u8string getU8stringFromString(const std::string& input) {return std::u8string(reinterpret_cast<const char8_t*>(input.data()), input.size());
}std::string getStringFromU8string(const std::u8string& input) {return std::string(reinterpret_cast<const char*>(input.data()), input.size());
}int main()
{std::u8string str1;std::cout << getStringFromU8string(str1) << "str1 length: " << str1.length() << std::endl;std::u8string str2 = std::u8string();std::cout << getStringFromU8string(str2) << "str2 length: " << str2.length() << std::endl;
}

2、基于C语言字符串

string(const char* s)

int main()
{system("chcp 65001");const char8_t* cstr = u8"Hello World 张三";std::u8string str1 = std::u8string(cstr);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;
}

3、基于C语言字符串前面几个

string(const char* s, size_t count)
count大于字符串长度,会有诡异问题(会用内存中无用内容填充)

int main()
{system("chcp 65001");const char8_t* cstr = u8"Hello World 张三";std::u8string str1 = std::u8string(cstr, 5);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;
}

4、拷贝构造函数

int main()
{system("chcp 65001");std::u8string str1 = std::u8string(u8"Hello 张三");// 拷贝构造函数std::u8string str2 = std::u8string(str1);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;std::cout << getStringFromU8string(str2) << ", str2 length: " << str2.length() << ", address=" << &str2 << std::endl;
}

5、移动构造函数

int main()
{system("chcp 65001");std::u8string str1 = std::u8string(u8"Hello 张三");// 移动构造函数std::u8string str2 = std::u8string(std::move(str1));std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;std::cout << getStringFromU8string(str2) << ", str2 length: " << str2.length() << ", address=" << &str2 << std::endl;
}

6、基于字符和重复次数构造函数

int main()
{system("chcp 65001");std::u8string str1 = std::u8string(4, 'A');std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;
}

7、迭代器范围构造函数

int main()
{system("chcp 65001");std::u8string input = u8"hello测试数据";// 范围构造函数std::u8string str1 = std::u8string(input.begin() + 1, input.end() - 1);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;
}

8、初始化列表构造函数

int main()
{system("chcp 65001");std::u8string str1{ 'H', 'e', 'l', 'l', 'o' };std::u8string str2 = u8"张三";std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;std::cout << getStringFromU8string(str2) << ", str2 length: " << str2.length() << ", address=" << &str2 << std::endl;
}

赋值操作

1、运算符赋值

int main()
{system("chcp 65001");std::u8string str1 = u8"Hello World 张三";std::u8string str2 = std::move(str1);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;std::cout << getStringFromU8string(str2) << ", str2 length: " << str2.length() << ", address=" << &str2 << std::endl;
}

2、方法赋值

int main()
{system("chcp 65001");std::u8string str1;// 从 C 字符串赋值str1.assign(u8"Hello");str1.assign(u8"World", 3);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;// 重复字符赋值str1.assign(5, '&');std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;// 从其他 string 赋值std::u8string other = u8"张三";str1.assign(other);str1.assign(other, 0, 7);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;// 迭代器范围赋值str1.assign(other.begin(), other.begin() + 4);std::cout << getStringFromU8string(str1) << ", str1 length: " << str1.length() << ", address=" << &str1 << std::endl;
}

元素访问

1、下标访问

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";// 中文显示很诡异std::cout << getStringFromU8string(std::u8string(1, str1[0])) << std::endl;std::cout << getStringFromU8string(std::u8string(1, str1.at(1))) << std::endl;// 修改str1[0] = u8'w';str1.at(1) = u8'o';std::cout << getStringFromU8string(std::u8string(1, str1[0])) << std::endl;std::cout << getStringFromU8string(std::u8string(1, str1.at(1))) << std::endl;
}

2、首尾元素访问

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";// 中文显示很诡异std::cout << getStringFromU8string(std::u8string(1, str1.front())) << std::endl;std::cout << getStringFromU8string(std::u8string(1, str1.back())) << std::endl;// 修改str1.front() = u8'w';str1.back() = u8'o';std::cout << getStringFromU8string(std::u8string(1, str1.front())) << std::endl;std::cout << getStringFromU8string(std::u8string(1, str1.back())) << std::endl;
}

3、C语言风格访问

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";const char8_t* cstr = str1.c_str();const char8_t* data = str1.data();std::cout << getStringFromU8string(++cstr) << std::endl;std::cout << getStringFromU8string(data++) << std::endl;
}

容量大小

操作方法功能描述示例
[]操作符访问指定位置字符(不检查边界)char c = str[0];
at()访问指定位置字符(检查边界)char c = str.at(0);
length()/size()获取字符串长度int len = str.size();
capacity()获取当前分配的内存容量int cap = str.capacity();
empty()检查字符串是否为空if (str.empty()) {...}

1、容量大小查询

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";std::cout << "str1.length()= " << str1.length() << std::endl;std::cout << "str1.size()= " << str1.size() << std::endl;std::cout << "str1.capacity()= " << str1.capacity() << std::endl;std::cout << "str1.empty()= " << boolalpha << str1.empty() << std::endl;
}

2、容量大小改变

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";// 多余字符被截取str1.resize(3);std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;// 多余空间赋指定值str1.resize(8, '&');std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;// 多余空间不赋值str1.resize(10);std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;//  预留内存str1.reserve(100);std::cout << "str1.reserve()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;// 释放多余内存str1.shrink_to_fit();std::cout << "str1.shrink_to_fit()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;// 清空字符串str1.clear();std::cout << "str1.clear()= " << getStringFromU8string(str1) << '\t' << str1.length() << '\t' << str1.capacity() << std::endl;
}

3、短字符串优化(SSO)

编译器会自动优化短字符串,将内容存在栈中,通常在 ‌15到23个字符‌ 之间(在常见的64位系统上,许多实现为15个字符)

int main()
{system("chcp 65001");std::u8string str1 = u8"hello张三";std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;std::u8string str2 = u8"大多数实现对短字符串使用栈内存,避免堆分配";std::cout << "str2.resize()= " << getStringFromU8string(str2) << '\t' << "length=" << str2.length() << '\t' << "capacity=" << str2.capacity() << std::endl;
}

修改操作

操作方法功能描述示例
=赋值字符串赋值str = "world";
+=操作符字符串追加str += "!";
append()追加字符串str.append("123");
insert()在指定位置插入字符串str.insert(2, "abc");
erase()删除部分字符str.erase(2, 3);
replace()替换部分字符str.replace(2, 3, "xyz");
clear()清空字符串内容str.clear();

1、拼接操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三";std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// +=拼接str1 += u8"大多数实现对短字符串使用栈内存,避免堆分配";std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// append拼接str1.append(u8"world");str1.append(3, '#');str1.append(u8"abc", 5);str1.append(u8"defghijk", 3, 5);std::cout << "str1.resize()= " << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;
}

2、插入操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三";std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 指定索引位置插入str1.insert(5, u8" World");std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 指定迭代器位置插入str1.insert(str1.begin() + 1, '&');std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 指定索引位置插入N个同样字符str1.insert(0, 3, '#');std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 指定索引位置插入字符串变量str1.insert(2, str1);std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;
}

3、删除操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三world";std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 从指定位置开始删除指定数量str1.erase(2, 2);std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 删除指定迭代器位置的字符str1.erase(str1.begin() + 2);std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 删除指定迭代器范围的字符str1.erase(str1.begin() + 1, str1.end() - 3);std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 全部清空str1.clear();std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 弹出最后一个字符str1.assign(u8"hello world");str1.pop_back();std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;
}

4、替换操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三world";std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// [指定位置,指定位置+N) 替换为新字符串str1.replace(2, 2, u8"ABC");std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// [迭代器位置,迭代器位置) 替换为新字符串str1.replace(str1.begin() + 1, str1.begin() + 2, u8"HeHe");std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// [指定位置,指定位置+N) 替换为N个同样字符str1.replace(0, 2, 3, '&');std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;
}

5、交换移动

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三";std::u8string str2 = u8"李四world";std::cout << "str1=" << getStringFromU8string(str1) << std::endl;std::cout << "str2=" << getStringFromU8string(str2) << std::endl;std::cout << "________________________________" << endl;// 交换内容str1.swap(str2);std::cout << "swap, str1=" << getStringFromU8string(str1) << std::endl;std::cout << "swap, str2=" << getStringFromU8string(str2) << std::endl;std::cout << "________________________________" << endl;// 交换内容std::swap(str1, str2);std::cout << "swap, str1=" << getStringFromU8string(str1) << std::endl;std::cout << "swap, str2=" << getStringFromU8string(str2) << std::endl;std::cout << "________________________________" << endl;// 移动std::u8string str3 = std::move(str1);std::cout << "swap, str1=" << getStringFromU8string(str1) << std::endl;std::cout << "swap, str3=" << getStringFromU8string(str3) << std::endl;std::cout << "________________________________" << endl;// 移动赋值std::u8string str4 = std::move(str2);std::cout << "swap, str2=" << getStringFromU8string(str2) << std::endl;std::cout << "swap, str4=" << getStringFromU8string(str4) << std::endl;
}

查找操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三world";std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 从前往后查找auto pos1 = str1.find(u8"world");std::cout << getStringFromU8string(u8"位置-> ") << pos1 << endl;pos1 = str1.find('o');std::cout << getStringFromU8string(u8"位置-> ") << pos1 << endl;pos1 = str1.find(u8"o", 6);std::cout << getStringFromU8string(u8"位置-> ") << pos1 << endl;// 从后往前查找pos1 = str1.rfind(u8"hello");std::cout << getStringFromU8string(u8"位置-> ") << pos1 << endl;// 未找到返回 string::npospos1 = str1.find(u8"哈哈");if (pos1 == string::npos) {std::cout << "Not found -> " << pos1 << endl;}// 查找第一个匹配字符pos1 = str1.find_first_of(u8"l");std::cout << getStringFromU8string(u8"查找第一个匹配字符-> ") << pos1 << endl;// 查找最后一个匹配字符  pos1 = str1.find_last_of(u8"o");std::cout << getStringFromU8string(u8"查找最后一个匹配字符-> ") << pos1 << endl;// 查找第一个不匹配字符pos1 = str1.find_first_not_of(u8"ho");std::cout << getStringFromU8string(u8"查找第一个不匹配字符-> ") << pos1 << endl;// 查找最后一个不匹配字符pos1 = str1.find_last_not_of(u8"ro");std::cout << getStringFromU8string(u8"查找最后一个不匹配字符-> ") << pos1 << endl;// 是否以指定字符串开始bool match = str1.starts_with(u8"hello");std::cout << getStringFromU8string(u8"starts_with字符串-> ") << boolalpha << match << endl;match = str1.starts_with('H');std::cout << getStringFromU8string(u8"starts_with字符-> ") << boolalpha << match << endl;// 是否以指定字符串结束match = str1.ends_with(u8"world");std::cout << getStringFromU8string(u8"starts_with字符串-> ") << boolalpha << match << endl;match = str1.ends_with('d');std::cout << getStringFromU8string(u8"starts_with字符-> ") << boolalpha << match << endl;
}

截取操作

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello张三world";std::cout << getStringFromU8string(str1) << '\t' << "length=" << str1.length() << '\t' << "capacity=" << str1.capacity() << std::endl;// 截取字符串 [N,结束]auto sub1 = str1.substr(6);std::cout << getStringFromU8string(sub1) << '\t' << "length=" << sub1.length() << '\t' << "capacity=" << sub1.capacity() << std::endl;// 截取字符串 [N,N+5)sub1 = str1.substr(0, 5);std::cout << getStringFromU8string(sub1) << '\t' << "length=" << sub1.length() << '\t' << "capacity=" << sub1.capacity() << std::endl;// 截取字符串 [N,越界)sub1 = str1.substr(6, 1000);std::cout << getStringFromU8string(sub1) << '\t' << "length=" << sub1.length() << '\t' << "capacity=" << sub1.capacity() << std::endl;// 截取字符串 [越界,无穷大)try {sub1 = str1.substr(100);std::cout << getStringFromU8string(sub1) << '\t' << "length=" << sub1.length() << '\t' << "capacity=" << sub1.capacity() << std::endl;}catch (const std::out_of_range& e) {cout << getStringFromU8string(u8"越界了") << endl;}
}

比较操作

1、运算符比较

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello";std::u8string str2 = u8"world";std::cout << boolalpha << (str1 == str2) << endl;std::cout << boolalpha << (str1 != str2) << endl;std::cout << boolalpha << (str1 > str2) << endl;std::cout << boolalpha << (str1 >= str2) << endl;std::cout << boolalpha << (str1 < str2) << endl;std::cout << boolalpha << (str1 <= str2) << endl;
}

2、方法比较

int main()
{system("chcp 65001");// = 赋值std::u8string str1 = u8"hello";std::u8string str2 = u8"world";// 两个字符串比较std::cout << boolalpha << str1.compare(str2) << endl;// 分别截取子串比较std::cout << boolalpha << str1.compare(2, 3, str2, 3, 4) << endl;// 截取前面子串比较std::cout << boolalpha << str1.compare(2, 3, str2) << endl;
}

迭代器操作

中文cout按字符默认输出到控制台有问题

int main()
{system("chcp 65001");// = 赋值std::string str1 = "hello&%world";// 正向迭代器for (auto it = str1.begin(); it != str1.end(); ++it) {std::cout << *it << " ";}std::cout << endl;std::cout << "------------------------------------" << endl;// 常量迭代器for (auto it = str1.cbegin(); it != str1.cend(); ++it) {std::cout << *it << " ";}std::cout << endl;std::cout << "------------------------------------" << endl;// 反向迭代器for (auto it = str1.rbegin(); it != str1.rend(); ++it) {std::cout << *it << " ";}std::cout << endl;std::cout << "------------------------------------" << endl;// 范围 for 循环for (char c : str1) {std::cout << c << " ";}std::cout << endl;std::cout << "------------------------------------" << endl;// const 范围 forfor (const char& c : str1) {std::cout << c << " ";}std::cout << endl;std::cout << "------------------------------------" << endl;
}
http://www.dtcms.com/a/549857.html

相关文章:

  • [人工智能-大模型-110]:用通俗易懂的语言,阐述梯度下降的本质和数学原理:就是“摸着坡度下山”——哪边最陡,就往反方向走一步,反复走,直到走到谷底。
  • 龙华做棋牌网站建设哪家好哪个平台可以免费推广
  • 网站负责人可以备案怎么看网站域名
  • AIoT项目芯片选型指南:在性能、功耗与成本的十字路口
  • Vue 3 插槽(Slot)详解
  • 刘涛做的网站网络营销的优势包括
  • Spring Boot数据访问篇:整合MyBatis操作数据库
  • 丰都网站建设报价现代示范校建设专题网站
  • Flink Keyed State 详解之七
  • 中国建设银行贵州分行网站宁波建设银行管方网站
  • NVIDIA驱动更新“翻车”?解决RTX 2060在Bilibili客户端无法加载4K视频的终极指南*
  • 贵德县建设局网站校园兼职网站开发用例图
  • JavaSE知识分享——类和对象(下)
  • 企业级K8s部署:Helm+Kustomize混合策略实现零配置漂移与10分钟多环境发布
  • 上海人才中心昆明网站词排名优化
  • jQuery Growl - 实用且易于集成的通知插件
  • Manage Provisioning Access 功能详解
  • 龙岗在线网站建设网络销售网站外包
  • NVIDIA NCCL 源码学习(十六)- nccl的ibgda(GIN)
  • 深度优先搜索(DFS)
  • 协会网站建设方案wordpress 以前文章灯箱
  • PCIe学习笔记
  • 处理 rstudio-server 卡死问题
  • C 盘清理技巧分享
  • 零基础小白如何高效入门项目管理?
  • 安装与切换Rust版本
  • 云服务器建立多个网站文山知名网站建设公司
  • 深圳网站建设网站制作网站推广vps一键安装wordpress
  • 定制网站和模板建站室内设计培训网课
  • 云免网站空间自己怎么做网站模块