跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

C++ STL string 容器基础用法与构造技巧

C++ STL string 容器作为标准库核心组件,解决了 C 语言字符串手动管理内存和越界风险问题。文章介绍了 STL 发展背景及版本差异,重点讲解了 string 类的面向对象特性,并详细演示了包括空构造、常量构造、拷贝构造、子串构造、迭代器范围构造、移动构造及初始化列表在内的九种常用构造方式,帮助开发者安全高效地处理文本数据。

萤火微光发布于 2026/2/9更新于 2026/10/24107 浏览
C++ STL string 容器基础用法与构造技巧

C++ string 详解:STL 字符串容器的使用技巧

STL 简介

STL(Standard Template Library,标准模板库)是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

STL 的版本历史

  • HP 版本:由 Alexander Stepanov、Meng Lee 在惠普实验室完成,开源且允许任意运用、拷贝、修改。是所有 STL 实现版本的始祖。
  • P.J. 版本:由 P. J. Plauger 开发,继承自 HP 版本,被 Windows Visual C++ 采用。不可公开或修改,可读性较低。
  • RW 版本:由 Rouge Wage 公司开发,继承自 HP 版本,被 C++ Builder 采用。不可公开或修改,可读性一般。
  • SGI 版本:由 Silicon Graphics Computer Systems, Inc 开发,继承自 HP 版本,被 GCC (Linux) 采用。可移植性好,可公开、修改甚至贩卖,命名和编程风格阅读性非常高。

String 类概述

C 语言中的字符串

C 语言中,字符串是以 '\0' 结尾的一些字符的集合。C 标准库提供了一些 str 系列的库函数,但这些库函数与字符串是分离开的,不太符合 OOP 的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。

OOP 思想

OOP(Object-Oriented Programming)即面向对象编程,核心是将程序中的数据和操作数据的方法封装成对象,通过对象之间的交互来完成程序功能。string 类正是基于此设计,提供了更安全便捷的字符串处理方式。

string 常见构造方式

以下是 string 类的九种常见构造方法示例:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <string>
using namespace std;

int main() {
    // 1. 空构造函数:创建一个空字符串
    string s1;
    cout << "s1 (空构造): \"" << s1 << "\" (长度:" << s1.size() << ")" << endl;

    // 2. 字符串常量构造:用 C 风格字符串(const char*)初始化
    string s2("12345");
    cout << "s2 (字符串常量构造): \"" << s2 << "\" (长度:" << s2.size() << ")" << endl;

    // 3. 拷贝构造:用另一个 string 对象初始化
    string s3(s2);
    cout << "s3 (拷贝构造): \"" << s3 << "\" (长度:" << s3.size() << ")" << endl;

    // 4. 子串构造:从另一个 string 的指定位置开始,取 n 个字符
    string s4(s2, 1, 3); // 从 s2 的下标 1 开始,取 3 个字符:"234"
    cout << "s4 (子串构造 - 指定 count): \"" << s4 << "\" (长度:" << s4.size() << ")" << endl;

    // 子串构造补充:省略 count,读取从 pos 到字符串末尾
    string s4_extend(s2, 1); // 从下标 1 开始取到末尾:"2345"
    cout << "s4_extend (子串构造 - 省略 count): \"" << s4_extend << "\" (长度:" << s4_extend.size() << ")" << endl;

    // 5. C 风格字符串截取构造:取 C 风格字符串的前 n 个字符
    string s5("hello world", 5); // 取前 5 个字符:"hello"
    cout << "s5 (C 字符串截取 - 指定 n): \"" << s5 << "\" (长度:" << s5.size() << ")" << endl;

    // C 风格字符串截取补充:省略 n,读取整个字符串(直到'\0')
    string s5_extend("hello world"); // 等价于不指定 n,直接读全部:"hello world"
    cout << "s5_extend (C 字符串截取 - 省略 n): \"" << s5_extend << "\" (长度:" << s5_extend.size() << ")" << endl;

    // 6. 重复字符构造:创建包含 n 个指定字符的字符串
    string s6(5, 'a'); // 5 个'a':"aaaaa"
    cout << "s6 (重复字符构造): \"" << s6 << "\" (长度:" << s6.size() << ")" << endl;

    // 7. 迭代器范围构造:用迭代器指定的范围初始化
    string s7(s2.begin(), s2.end() - 2); // 取 s2 的 begin 到 end-2:"123"
    cout << "s7 (迭代器范围构造): \"" << s7 << "\" (长度:" << s7.size() << ")" << endl;

    // 8. 移动构造(C++11 及以上):将临时 string 对象的资源转移
    string s8(move(string("temp string"))); // 移动构造,接管临时对象资源
    cout << "s8 (移动构造): \"" << s8 << "\" (长度:" << s8.size() << ")" << endl;

    // 9. 初始化列表构造(C++11 及以上):用字符初始化列表创建字符串
    string s9{'h', 'e', 'l', 'l', 'o'}; // "hello"
    cout << "s9 (初始化列表构造): \"" << s9 << "\" (长度:" << s9.size() << ")" << endl;

    return 0;
}

以上展示了 string 的基本构造写法。掌握这些构造方式有助于在实际项目中安全、高效地处理文本数据,避免手动管理内存带来的风险。

目录

  1. C++ string 详解:STL 字符串容器的使用技巧
  2. STL 简介
  3. STL 的版本历史
  4. String 类概述
  5. C 语言中的字符串
  6. OOP 思想
  7. string 常见构造方式

更多推荐文章

查看全部
  • Vue 与 C++:前端与系统开发差异
  • 飞算 Java AI 工具使用指南:安装配置与项目生成
  • 使用 AI 快速解析 COM.MFASHIONGALLERY.EMAG 接口
  • 策略模式实战:通过 C++ 实现算法解耦与行为封装
  • 企业级工作流引擎低代码开发实战:RuoYi-Flowable-Plus 指南
  • 程序员求职现状分析:行业寒冬下的赛道选择与技能提升
  • MySQL 表基础语法:增删查与函数核心技巧
  • 高鋒集團與 Web3Labs:以資本與生態賦能傳統企業 Web3 轉型
  • C++ 关联容器实战:Set、Map 与键值对核心解析
  • 基于大模型的学术论文生成工具功能介绍
  • 深入理解数据结构中的时间与空间复杂度
  • 通义万相 2.1 文生视频模型部署与硬件性能实测
  • Python 实现 2025 中秋月相计算与月球数据可视化
  • 大模型落地应用:企业智能化转型的策略与实践
  • 微软 Excel 原生支持 Python 功能详解与机器学习应用
  • Python GUI 可视化设计工具 tkinter-helper 介绍
  • RAG 检索增强生成:概念、原理与实战
  • AI 语言模型详解:原理、架构与应用实践
  • ToDesk/顺网/海马云部署 DeepSeek 实测对比
  • Minecraft 开源注入式客户端 LiquidBounce 使用指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online