zoukankan      html  css  js  c++  java
  • Chapter3 (字符串,向量,数组) --C++Prime笔记

    1.using用法:using namespace ::name;注意事项:一般不在头文件使用using否则很容易导致运用命名空间不对错误。

    2.string的方法:
    ①getline(输入流,string对象);注意一点是,函数从给定流读入内容,直到遇到换行符结束,(换行符也被读进来了),然后把所读的内容存入那个string对象中去(注意不存换行符

    ②size,size函数的返回值是string::size_type,可以确定的是这是一种无符号数,可以使用auto或者decltype来推断变量的类型。
    auto len = line.size(); //len类型是string::size_type.
    ps:如果一条表达式中已经有了size()函数就不要int了,避免混用有符号int和unsigned带来的问题(负数和无符号数比较时候会自动转换为一个很大的无符号数)

    3.string是一种可变字符序列,其实就是一种可变长的字符数组,注意它和字符/字符串字面值不是同一类型的量。

    4.当把string对象和字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧的运算对象至少有一个是string.

    5.如果想改变string对象中字符的值,必须把for(declaration : expession)中的循环变量定义成引用类型。

    6.用下标访问string类型变量前,都需要检查s是否为空。否则访问会导致不可预料的结果。
    例子:
    string s ("some string");
    if(!s.empty())
    {
        s[0] = toupper(s[0]);
    }


    7.注意点:string下标使用的注意点:大于等于0,小于等于s.size().
    ①总是设下标的类型为string::size_type
    ②满足下标小于s.size();

    8.对于vector的编程要求:
    ①必须确保所写的循环正确无误,特别是在循环条件有可能改变vector对象容量的时候。
    ②如果循环体内部包含有向vector对象添加元素的语句,则不能使用范围for循环。
    任何一种可能改变vector对象容量的操作,比如push_back,都会使该vector对象的迭代器失效。
    但凡是使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

    9.要使用vector中的size_type必须先指定它是由哪种类型定义的。vector对象的类型总是包含着元素的类型:
    vector<int>::size_type  //正确
    vector::size_type  //错误

    10.只有当元素可以比较的时候,vector对象才可以比较。

    11.vector对象(以及string对象)的下标运算可用于访问已经存在的元素,而不能用于添加元素(添加元素只能通过push_back,在不用这些方法前这个vector对象的数量都是已经定下的,因此向其中添加元素会引起访问越界。)

    12.在for循环中应该要更多的使用!=判断符,而不是类似<这类的大小比较符,因为并不是所有的容器都定义了<,>,但是所有的容器都定义了== 和!=,因此这种编程风格在标准库提供的所有容器上都有效。

    13.每个容器类定义了名为iterator和const_interator的类型。前者可用于常量或非常量对象,后者指的是所定义的迭代器所指的元素值不能修改,因此只能用于常量对象

    14.begin和end返回的是iterator还是const_iterator由容器的类型决定,对象是常量对象,则返回const_iterator,非常量则为iterator.另外C++11中新引入了两个新函数,cbegin和cend,无论对象是常量还是非常量,这两个函数返回值都是const_iterator.

    15.vector和数组的区别:数组的大小确定不变,不能随意向数组中增加元素。

    16.想要理解数组的声明的含义,最好的方法就是从数组的名字开始按照由内向外的顺序阅读.
    例子:
    int (*Parray)[10] = &arr; //Parray指向一个含有是个int元素的数组
    int (&arrRef)[10] = arr; //arrRef引用一个含有十个整数的数组
    int *(&arry)[10]  = ptrs; // arry是数组的引用,该数组含有10个int型指针

    17.当decltype作用于数组的时候就应该小心,
    int iarr[10] = {0};
    decltype(iarr)ib;
    这个时候ib的定义等价于 int ib[10];两者是一样的。不要觉得ib是一个指针了,它是一个正宗的数组

    18.标准库(如vector,string)限定使用的下标必须是无符号类型,而内置的下标运算所用的索引值不是无符号类型。
  • 相关阅读:
    苹果一体机发射Wi-Fi
    iphone 屏蔽系统自动更新,消除设置上的小红点
    data parameter is nil 异常处理
    copy与mutableCopy的区别总结
    java axis2 webservice
    mysql 远程 ip访问
    mysql 存储过程小问题
    mysql游标错误
    is not writable or has an invalid setter method错误的解决
    Struts2中关于"There is no Action mapped for namespace / and action name"的总结
  • 原文地址:https://www.cnblogs.com/LyndonMario/p/9326106.html
Copyright © 2011-2022 走看看