《C++Primer》学习 03.字符串、向量与数组

第三章 字符串、向量与数组

1. string

  • 头文件
  • str.size() 返回类型为string::size_type 是一个非负数,用于下标遍历
  • >>忽略开始的空白符(空格/制表符/换行符)读取直到遇到下一个空白符(不读入)结束
  • getline(stream,var)读取一行包括’\n’,且将’\n’去除剩余赋予var

2. vector

  • 模板类需要与类型结合进行实例化,默认初始化时会对各个元素进行值初始化
  • vector a{1,2,3,4,56,5,7}; 列表初始化,如果类型不对则按一般初始化尝试
  • vector::size_type 类型是一个非负数,用于下标遍历

3. iterator

  • vec.begin() 指向首元素 vec.end() 指向尾后元素 vec.cbegin() 返回const迭代器
  • ++it = 指向下一个元素
  • *iter 返回迭代器所指元素的引用
  • iter->men 等价 (*iter).men
  • iter1-iter2 = 两个之间的间距 是difference_type 类型带符号类型可为负数,迭代器所指元素的秩越大则在表达式中的值越大
template
auto find(const vector &vec,const T &e){//二分查找
    auto lo=vec.begin();
    auto hi=vec.end();
    while(lo vec{1,2,5,7,88,102,333,456,555};
    cout<<*find(vec,12);
    return 0;
}

4. 数组

  • 定义数组时下标一定是一个常量表达式,通常设定为一个size_t无符号类
  • 数组名无法被拷贝,赋值 但是可以用于for range语句
  • 复杂类型数组从右向左理解 int *ptr[10]; ptr指向10个整型指针数组
  • 复杂类型数组从中间向外理解 int (*ptr)[10]; ptr是指向10个整型数组的指针

5. 指针

  • int *beg=begin(array_name); 获取首元素指针 int *end=end(array_name); 获取尾后指针
  • 指针相减类型为ptrdiff_t,带符号类型
  • 不同类型指针不能比较,空指针相减为0
  • 内置数组下表类型可以为负号,如 int *p=&a[2]; 则*p[-1]=a[1] , *p[-2]=a[0]

6. 例题

  1. (3.27) txt_size()是一个无参函数,返回值是int

    1. 可以作为常量表达式,如int a[txt_size()];
    2. 参见可被constexpr修饰的函数条件
  2. (3.28) 在不同内存区定义数组时,默认初始化变量不同

    1. string sa[10]; 在静态区还是堆栈区定义都为空串
    2. int ia[10]; 在静态区定义默认为0,在堆栈区定义随机
    3. int ia[10]={}; 在静态区还是堆栈区定义都为0
  3. (3.29) 数组对比vector的缺点

    1. 大小固定,无法动态扩充
    2. 没有迭代器进行安全访问,需要寻址访问容易出现溢出
    3. 不支持泛型接口
  4. (3.43-3.45) 多种方式遍历多维数组

    // #1 下标 遍历多维数组
    int ia[3][4];
    for(size_t row=0;row<3;++row)
        for(size_t col=0;col<4;++col)
            cout<

你可能感兴趣的:(C++基础)