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

你可能感兴趣的文章
Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
查看>>
Objective-C实现2D变换算法(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现9x9乘法表算法(附完整源码)
查看>>
Objective-C实现9×9二维数组数独算法(附完整源码)
查看>>
Objective-C实现A*(A-Star)算法(附完整源码)
查看>>
Objective-C实现A-Star算法(附完整源码)
查看>>
Objective-C实现abbreviation缩写算法(附完整源码)
查看>>
Objective-C实现ABC人工蜂群算法(附完整源码)
查看>>
Objective-C实现activity selection活动选择问题算法(附完整源码)
查看>>
Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
查看>>
Objective-C实现adaboost算法(附完整源码)
查看>>
Objective-C实现Adler32算法(附完整源码)
查看>>
Objective-C实现AES算法(附完整源码)
查看>>
Objective-C实现AffineCipher仿射密码算法(附完整源码)
查看>>
Objective-C实现aliquot sum等分求和算法(附完整源码)
查看>>
Objective-C实现all combinations所有组合算法(附完整源码)
查看>>
Objective-C实现all permutations所有排列算法(附完整源码)
查看>>
Objective-C实现all subsequences所有子序列算法(附完整源码)
查看>>