美文网首页
C++ Primer: String, Vector and A

C++ Primer: String, Vector and A

作者: algebra2k | 来源:发表于2020-05-13 13:34 被阅读0次

1. String

处理字符串

cctype

处理每个字符

for-range 语句

for (declaration: expression)
  statement

for-range 改变字符串中字符的内容,需要添加引用符

for (auto &c: str)
  statement

处理部分字符

下标运算符
运算符 string[index], index类型是 string::size_type, 返回的是对应位置上字符的引用
index的可取范围区间在 [0, s.size())

2. Vector

vector初始化语法

vector操作

  • 不能再for-range中使用push_back
  • 空的vector不能通过计算索引去添加元素,但是开辟好空间的vector可以
  • 如果初始时指定了容量, push_back时是在初始的容量后面添加

3. 迭代器

begin() 成员返回指向容器的第一个元素,end() 返回容器末尾下一个位置的元素
迭代器分为有效和无效

  • 指向某个元素或指向容器末尾下一个位置属于有效(end())
  • 其他都是无效

如果迭代器为空,begin返回的是和end相同的迭代器

迭代器运算符

和指针类似,使用迭代器访问元素需要解引用

迭代器访问标准套路

for(auto it = s.begin(); it !=s.end(); it++)
  *it

迭代器类型

标准款类型分为

  • iterator
  • const_iterator: 表示只读,不能写入

对象是常量,beginend 返回 const_iterator

使用迭代器的循环结构,不要通过迭代器向容器内添加元素

迭代器运算

  • 迭代器增减n表示移动的距离
  • 两个迭代器只能进行减法,用于计算两个迭代器的距离
  • 比较迭代器表示迭代器的前后关系

4. Array

声明和初始化

  • 如果使用变量cnt初始化数组长度,则变量cnt必须是常量表达式
  • 默认情况下,数组的元素被默认初始化
  • 定义数组必须指定数组的类型,不能使用auto关键字推断类型
  • 数组的元素应为对象,不存在引用的数组
unsigned cnt = 42; // 如果使用cnt初始化数组会在编译时出错
constexpr unsigned sz = 42;  // sz是正确的
int arr[10];
int *parr[sz]; // 含有42个整型指针的数组

// 显示初始化
int ial[3] = {0, 1, 2};
int a2[] = {0, 1, 2};
int a3[5] = {0, 1, 2}; // 等价于 {0, 1, 2, 0, 0}

字符数组

使用列表初始化字符数组,如果不显示声明'\0',则不会自动添加, 使用字面量初始化字符数组会隐式添加\0;

char a1[] = {'c', '+', '+'}; // 不包含 '\0'
char a2[] = {'c', '+', '+', '\0'}; // 手动添加 '\0'
char a3[] = "c++"l // 自动包含'\0'

数组不允许拷贝赋值

复杂数组声明

从内向外阅读有助于理解复杂的数组声明

int *ptrs[10]; // 存放10个int类型的指针
int (*Parray)[10] = &arr; // Parray是一个指针,指向含有10个整数的数组
int (&arrRef)[10] = arr;  // arrRef是一个引用,引用一个含有10个整数的数组
iny *(&arry)[10] = ptrs; // arry是数组的引用,该数组含有10个指针

访问数组

数组可以有多种访问形式

  1. 使用下标
int ia[10];
ia[0];

下标的类型为size_t

  1. 使用指针作为迭代器
    获取到数组首元素的指针后, 就可以对其访问
int ia[10];
int *pia = &ia[0]; // 等价于 int *pia = ia;

++pia; // 指向下一个位置
  1. 标准库begin和end
    通常使用指针不太安全, c++11在标准库提供了这两个函数, 用法和迭代器部分一致

c风格字符串

c风格字符串并不是一种类型, 而是为了表达字符串所约定的一种写法: 以'\0' 字符结尾.

和string不同, string标准库支持了操作符重载, 一些操作可以使用符号进行, c风格字符串的操作需要使用对应的函数, 对应在C++的头文件是 #include <cstring>

对大多数应用来说, 标准库的string使用比c风格字符串更安全

c风格字符串和string混合使用

  • 可以使用c风格字符串初始化string
string s("hello");
  • 可以使用c风格字符串和string拼接
s1 + "hello";
  • 可以使用c风格字符串赋值给string
s1 = "hello";

数组初始化vector

int ia[10];
vector<int> v(begin(ia), end(ia));

5. 多维数组

数组的数组

二维数组: 一维是数组本身的大小, 一维是数组元素的个数. 也称为行和列.

多维数组的访问和操作与数组一致, 注意所处的维度.

相关文章

  • C++ Primer: String, Vector and A

    1. String 处理字符串 cctype 处理每个字符 for-range 语句 for-range 改变字符...

  • C++模板库笔记

    C++标准模板库笔记(C++ Primer plus) 1.除序列外,vector还是可反转容器(reversib...

  • [C++ Primer Note2] string,vector

    前文介绍的内置类型是C++语言直接定义的。这些类型,比如数字和字符,体现了大多数计算机硬件本身具备的能力。标准库定...

  • 4.2 字符数组

    程序来源 :C++ primer plus 章 节 :4.2 名 称 :string.cpp 功 ...

  • C++系列 --- string类型介绍

    一、前言 int,float,char,C++标准库提供的类型:string,vector。 string:可变长...

  • C++STL整理

    C++ STL中最基本以及最常用的类或容器string、vector、set、list、map string 处理...

  • c++学习笔记——第一天

    一、c++综述 (1)书籍推荐 ①、c++ primer ②、c++ primer plus ③、c++编程思想 ...

  • vector的初始化

    c++ primer里面关于vector的初始化方式是这样说的 image.png 可以看到第一行默认初始化,也就...

  • const const

    起因是源于c++ primer16.3中的一个例子: 实例化上述模版 T 的类型为 const string*,因...

  • 学习C++所需看的书籍,初学小白的福音!

    初学: 《C++ 编程思想》 《C++ Primer》 《The C++ Programming Language...

网友评论

      本文标题:C++ Primer: String, Vector and A

      本文链接:https://www.haomeiwen.com/subject/aerbnhtx.html