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

你可能感兴趣的文章
pca算法
查看>>
PCA降维demo
查看>>
SharePoint 2013 图文开发系列之定义站点模板
查看>>
PCB生产流程详解-ChatGPT4o作答
查看>>
PCB设计十条黄金法则
查看>>
SpringSecurity框架介绍
查看>>
PCI Express学习篇:Power Management(二)
查看>>
pcie握手机制_【博文连载】PCIe扫盲——Ack/Nak 机制详解(一)
查看>>
pcm转wav的方法及代码示例
查看>>
PC史上最悲剧的16次失败
查看>>
PC端恶意代码分析Lab1.1-5.1,从零基础到精通,收藏这篇就够了!
查看>>
PC端稳定性测试探索
查看>>
PC端编辑 但能在PC端模拟移动端预览的富文本编辑器
查看>>
PDB文件:每个开发人员都必须知道的
查看>>
springMVC学习(二)
查看>>
Pdfkit页眉和页脚
查看>>
PDF中的Pandoc语法突出显示不起作用
查看>>
pdf从结构新建书签_在PDF文件中怎样创建书签
查看>>
pdf做成翻页电子书_第一弹:常见BOOX电子书阅读器问题解答,这些技能你都会吗?...
查看>>
PDF工具箱-分割提取合并
查看>>