博客
关于我
[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实现iterating through submasks遍历子掩码算法(附完整源码)
查看>>
Objective-C实现iterative merge sort迭代归并排序算法(附完整源码)
查看>>
Objective-C实现jaccard similarity相似度无平方因子数算法(附完整源码)
查看>>
Objective-C实现Julia集算法(附完整源码)
查看>>
Objective-C实现jump search跳转搜索算法(附完整源码)
查看>>
Objective-C实现jumpSearch跳转搜索算法(附完整源码)
查看>>
Objective-C实现k nearest neighbours k最近邻分类算法(附完整源码)
查看>>
Objective-C实现k-means clustering均值聚类算法(附完整源码)
查看>>
Objective-C实现k-Means算法(附完整源码)
查看>>
Objective-C实现k-nearest算法(附完整源码)
查看>>
Objective-C实现KadaneAlgo计算给定数组的最大连续子数组和算法(附完整源码)
查看>>
Objective-C实现kadanes卡达内斯算法(附完整源码)
查看>>
Objective-C实现kahns algorithm卡恩算法(附完整源码)
查看>>
Objective-C实现karatsuba大数相乘算法(附完整源码)
查看>>
Objective-C实现karger算法(附完整源码)
查看>>
Objective-C实现KMP搜索算法(附完整源码)
查看>>
Objective-C实现Knapsack problem背包问题算法(附完整源码)
查看>>
Objective-C实现knapsack背包问题算法(附完整源码)
查看>>
Objective-C实现knapsack背包问题算法(附完整源码)
查看>>
Objective-C实现knight tour骑士之旅算法(附完整源码)
查看>>