博客
关于我
[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/

你可能感兴趣的文章
opencv特征提取1-Harris角点检测
查看>>
OpenCV环境搭建(一)
查看>>
OpenCV的视频读取
查看>>
openCV目标识别 目标跟踪 YOLO5深度学习 Python 计算机视觉 计算机毕业设计 源码下载
查看>>
opencv笔记(1):图像缩放
查看>>
opencv笔记(二十四)——得到轮廓之后找到凸包convex hull
查看>>
OpenCV计算点到直线的距离 数学法
查看>>
Opencv识别图中人脸
查看>>
OpenCV读写avi、mpeg文件
查看>>
opencv里用calcCovarMatrix计算协方差矩阵
查看>>
OpenCV错误:在setSize中断言失败(s&>;=0)-尝试将图像放置在网络摄像头提要上时
查看>>
opencv面向对象设计初探
查看>>
OpenCV(1)读写图像
查看>>
OpenCV:不规则形状区域中每种颜色的像素数?
查看>>
OpenCV:概念、历史、应用场景示例、核心模块、安装配置
查看>>
OpenDaylight融合OpenStack架构分析
查看>>
OpenERP ORM 对象方法列表
查看>>
openEuler Summit 2022 成功举行,开启全场景创新新时代
查看>>
openEuler 正式开放:推动计算多样化时代的到来
查看>>
OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
查看>>