目录一、迭代器(二)------接上一篇博文(一)begin()(二)rbegin() -------反向迭代器二、string中的方法(一)从capacity()/push_back()来看在vs2022下编译器如何进行扩容(二)pop_back()/shrink_to_fit()(三)reserve()(四)resize()一、迭代器(二)------接上一篇博文(一)begin()const iterator 修饰本身不能修改实践中无法被修改const_iterator 修饰迭代器指向的数据不能修改(二)rbegin() -------反向迭代器void test_string1() { string s1(hello world); string::reverse_iterator it3 s1.rbegin(); while (it3 ! s1.rend()) { cout (*it3) ; it3; } cout endl; }二、string中的方法(一)从capacity()/push_back()来看在vs2022下编译器如何进行扩容void string_test2() { string s2; size_t old s2.capacity(); cout capacity: old endl; for (size_t i 0;i 100;i) { s2.push_back(x); if (s2.capacity() ! old) { cout capacity: s2.capacity() endl; old s2.capacity(); } } }1、在vs2022下大概1.5备扩容2、在centos7.6下(g)2倍扩容(二)pop_back()/shrink_to_fit()1、pop_back()本身不会缩容缩容要重新开空间2、请求字符串缩减容量使其恰好适配当前字符数。该请求不具约束力容器实现可自行优化保留大于字符数的容量。此函数不改变字符串长度也不会修改其内容。cout size: s2.size() endl; cout capacity: s2.capacity() endl; for (size_t i 0;i 50;i) { s2.pop_back(); } s2.shrink_to_fit(); cout size: s2.size() endl; cout capacity: s2.capacity() endl;1、vs2022下2、g下(三)reserve()请求调整字符串容量以适应计划内的长度变更最多容纳 n 个字符。如果 n 大于字符串当前容量该函数会使容器将容量增加至 n 个字符或更大。在其他所有情况下该操作被视为一个非强制性的缩容请求容器实现可自由进行优化并允许字符串保留大于 n 的容量。该函数不会影响字符串长度也无法修改其内容。void string_test3() { string s3; //确定知道需要多少空间提前开好避免扩容提高效率 s3.reserve(100); size_t old s3.capacity(); cout capacity: old endl; for (size_t i 0;i 100;i) { s3.push_back(x); if (s3.capacity() ! old) { cout capacity: s3.capacity() endl; old s3.capacity(); } } }1、vs20222、g(四)resize()调整字符串大小,将字符串的 长度(长度 / 实际字符数)调整为 n 个字符。如果 n 小于当前字符串长度则将当前值截断为前 n 个字符删除第 n 个字符之后的所有内容。如果 n 大于当前字符串长度则在字符串末尾插入所需数量的字符将内容扩展至长度为 n。如果指定了字符c新添加的元素将初始化为c的副本否则新添加的元素将进行值初始化即空字符 \0。
C++入门之string(二)
发布时间:2026/6/10 7:53:28
目录一、迭代器(二)------接上一篇博文(一)begin()(二)rbegin() -------反向迭代器二、string中的方法(一)从capacity()/push_back()来看在vs2022下编译器如何进行扩容(二)pop_back()/shrink_to_fit()(三)reserve()(四)resize()一、迭代器(二)------接上一篇博文(一)begin()const iterator 修饰本身不能修改实践中无法被修改const_iterator 修饰迭代器指向的数据不能修改(二)rbegin() -------反向迭代器void test_string1() { string s1(hello world); string::reverse_iterator it3 s1.rbegin(); while (it3 ! s1.rend()) { cout (*it3) ; it3; } cout endl; }二、string中的方法(一)从capacity()/push_back()来看在vs2022下编译器如何进行扩容void string_test2() { string s2; size_t old s2.capacity(); cout capacity: old endl; for (size_t i 0;i 100;i) { s2.push_back(x); if (s2.capacity() ! old) { cout capacity: s2.capacity() endl; old s2.capacity(); } } }1、在vs2022下大概1.5备扩容2、在centos7.6下(g)2倍扩容(二)pop_back()/shrink_to_fit()1、pop_back()本身不会缩容缩容要重新开空间2、请求字符串缩减容量使其恰好适配当前字符数。该请求不具约束力容器实现可自行优化保留大于字符数的容量。此函数不改变字符串长度也不会修改其内容。cout size: s2.size() endl; cout capacity: s2.capacity() endl; for (size_t i 0;i 50;i) { s2.pop_back(); } s2.shrink_to_fit(); cout size: s2.size() endl; cout capacity: s2.capacity() endl;1、vs2022下2、g下(三)reserve()请求调整字符串容量以适应计划内的长度变更最多容纳 n 个字符。如果 n 大于字符串当前容量该函数会使容器将容量增加至 n 个字符或更大。在其他所有情况下该操作被视为一个非强制性的缩容请求容器实现可自由进行优化并允许字符串保留大于 n 的容量。该函数不会影响字符串长度也无法修改其内容。void string_test3() { string s3; //确定知道需要多少空间提前开好避免扩容提高效率 s3.reserve(100); size_t old s3.capacity(); cout capacity: old endl; for (size_t i 0;i 100;i) { s3.push_back(x); if (s3.capacity() ! old) { cout capacity: s3.capacity() endl; old s3.capacity(); } } }1、vs20222、g(四)resize()调整字符串大小,将字符串的 长度(长度 / 实际字符数)调整为 n 个字符。如果 n 小于当前字符串长度则将当前值截断为前 n 个字符删除第 n 个字符之后的所有内容。如果 n 大于当前字符串长度则在字符串末尾插入所需数量的字符将内容扩展至长度为 n。如果指定了字符c新添加的元素将初始化为c的副本否则新添加的元素将进行值初始化即空字符 \0。