博客
关于我
[C++]string、vector和数组
阅读量:500 次
发布时间:2019-03-06

本文共 2211 字,大约阅读时间需要 7 分钟。

C++ 标字符串、向量、迭代器和数组操作指南

1. C++ 字符串操作

字符串在 C++ 中是预定义的类 std::string,与 C 语言的字符串类型不同,前者是对象类型,支持更多操作。

1.1 初始化字符串

  • 空字符:未赋值的字符串会初始化为空字符。
  • 拷贝初始化和直接初始化:
    string S1;              // 空字符string S2 = "Hello";  // 拷贝初始化string S3{"Hello"};   // 直接初始化
  • 初始化字符串大小:string S4(10);string S4 = string(10); 只能使用直接初始化,string S2 = "a";string S3("a") 均支持拷贝和直接初始化。

1.2 string 操作

  • 输入:使用 std::cin,自动忽略前置空白。

    string s;cin >> s;              // 忽略前置空白,读取并去除末尾空白

    使用 std::getline() 保留空白:

    string s;string line = std::getline(s); // 不包括换行符
  • 字符串大小size_type 是无符号类型,可处理最大值,size() 计算字符串长度不含最后一个空字符。

    string s = "a";cout << s.size() << endl;  // 输出 1
  • 字符操作

    for (auto a : s) {    // 遍历字符引用    cout << a << endl; // 修改字符时用引用}s = "HELLO";  // 简单替换for (int i = 0; i < s.size(); ++i) {  // 用下标访问字符    s[i] = toupper(s[i]);}
  • 转换:将其他类型转换为字符串:

    int i = 42;string s = to_string(i);  // 转换为字符串

2. C++ 向量操作

向量是容器,用于存储多个相同类型的对象。

2.1 向量初始化

  • 默认初始化:未赋值的向量为空。
  • 拷贝初始化和直接初始化:
    vector
    articles = {"a", "an", "the"}; // 拷贝初始化vector
    v; // 空向量vector
    ivec; // 默认初始化为 0
  • 列举初始化:
    vector
    vecOfvec{10}; // 10 个空字符串vector
    v(10, 42); // 10 个 42vecOfvec.resize(10, "default"); // 具体初始化可选

2.2 向量操作

  • size(): 返回类型为 size_type,不含最后一个元素。
    int main() {    vector
    ivec(10); cout << ivec.size() << endl; // 输出 10}
  • 通过下标访问元素使用 []
    ivec[5] = 100;
  • 增加元素使用 push_back(),插入操作使现有迭代器失效。

3. 迭代器操作

C++ 标准容器提供迭代器,用于遍历数据。

3.1 迭代器类型

  • 指针迭代器:默认从 begin()end()
    string s = "Hello";auto iter = s.begin();while (iter != s.end()) {    *iter++ = toupper(*iter);}
  • const 迭代器(只读):cbegin()cend()
    const auto& cr = s.cbegin();

3.2 迭代器以外的操作

  • std::nextstd::prev 可用于移动迭代器。
  • 常用容器迭代器:
    int main() {    vector
    ivec = {1, 2, 3}; auto it = begin(ivec); // 返回类型为 vector
    ::iterator // 迭代操作}

4. 数组操作

C++ 支持通过迭代器操作数组。

4.1 数组为指针

数组转换为指针:

int a[] = {1, 2, 3};       // 数组声明int* pb = std::begin(a);      // 返回指针迭代器int* pe = std::end(a);          // 指向尾下一个元素
while (pb != pe) {    // 遍历数组元素}

4.2 数组特性

  • 数组是否是动态数组取决于其定义。
  • std::distance 计算两个迭代器间的差距:
    auto diff = std::distance(pb, pe); // 返回类型为 ptrdiff_t

通过以上内容可以清晰了解如何在 C++ 中使用字符串、向量、迭代器和数组进行操作,提升代码的生产力。

转载地址:http://lkodz.baihongyu.com/

你可能感兴趣的文章
Python 列表(List)概述-ChatGPT4o作答
查看>>
Python网络爬虫基础进阶到实战教程
查看>>
Python 初学者需要知道的四条建议
查看>>
Python 判断字符串是否包含子字符串
查看>>
python 判断当前时间是否为零点
查看>>
python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
查看>>
python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
查看>>
python 利用pyttsx3文字转语音
查看>>
python 利用已有Ner模型进行数据清洗合并
查看>>
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 包管理器和 Node.js
查看>>
Python 单词字母顺序不变且所有倒排
查看>>
python 启动提示IDLE's subprocess didn't make conne...
查看>>
python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
查看>>
Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
查看>>
Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
查看>>
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>