从零单排c++ primer(3)

(1)有两种方法可以定义类型别名,1.使用typedef
                    typedef double wages;
                    typedef wages base, *p;
                                                            2.使用别名声明using
                    using SI = Sales_item;
(2)为了确保各个文件中的类的定义一致,类通常被定义在头文件中,而且类的所在头文件的名字应与类的名字一样。头文件中还应包涵那些只能被定义一次的实体。
(3)头文件一旦改变,相关的源文件必须从新编译以获得更新过的声明。
(4)标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件。作为标准库的一部分,string定义在命名空间std中。
(5)初始化string对象的几种常用的方式:
                    string s1;
                    string s2 = s1;
                    string s3 = “hello”;
                    string s4(10,'c');
                    string s5(s4);
                    string s6("hello");
(6) 对于string的几种操作:
                    1.os << s    //将s写到输出流os当中,返回os
                    2.is >>  s    //从is中读取字符串赋给s,字符串以空白分隔符,返回is
                    3.getline(is,s)    //从is中读取一行赋给s,返回is   结束其输入ctrl+z
                    4.s.empty()    //s为空返回true ,否则返回false
                    5.s.size()    //返回s中字符的个数
                    6.s[n]    //返回s中第n个,字符的引用
                    7.s1 + s2     //返回s1和s2链接后的结果
                    8.s1 = s2     //用s2的副本代替s1中原来的字符串
(7)字符输入输出
                    std::string line;
           while(getline(std::cin,line))
          if(!line.empty())
   std::cout << line << std::endl; 
(8)size函数的返回值是一个string::size_type类型的值,它是一个无符号类型的值,定义在string类中。
(9)假设n是一个具有负值的int,则表达式s.size()<n的判断结果几乎肯定是true,因为负值n会自动的转换成一个比较大的无符号值,所以一个表达式中已经有了size()函数,就不要在使用int了,这样可以避免混用int和unsigned可能带来的问题。
(10)当把string对象和字符字面值及字符串字面值混在一条语句中使用时,必须确保每个加法运算符的两侧的运算对象至少有一个是string。
                      string s1 = "hh";
                      string s2 = "dd" + "," + s1; // 错误,加法执行顺序为从左向右。
(11)因为某些历史原因,也为了与C兼容,所以c++语言中的字符串字面值并不是标准的库类型string的对象,切记,字符串字面值与string是不同的类型。
(12)c++11新特性基于for的string遍历(怎么看都觉得是从java那里偷学来的,难怪弄出来个auto类型。。)
                string s("Hello World!!!");
                decltype(s,size()) punct_cnt = 0;
                for(auto c : s)
                    if(ispunct(c))
                        ++punct_cnt;
                cout<<punct_cnt << "pinctuation characters in " << s << endl;


                 //使用引用处理
                string s("Hello World!!!");
                for(auto &c : s)
                    c = toupper(c);
                cout << s <<endl;
(13)要想访问string对象的单个字符有两种方式:一种是使用小标,一种是使用迭代器
                    const string hexdigits = "0123456789ABCDEF";
                    string result;
                    string::size_type n;
                    while (cin >> n)
                        if (n < hexdigits.size())
                            result += hexdigits[n];
                    cout << result << endl; 
(14)标准库类型vector表示对象的集合,其中所有对象的类型都相同,集合中的每个对象都有一个与之对应的索引,索引用于访问对象。因为vector“容纳着”其他对象,所以它也常被称作容器。
(15)编译器根据模板创建类或函数的过程称为实例化,当使用模板时,需要指出编译器应把类或函数实例化成何种类型。
(16)vector是模板而非类型,由vector生成的类型必须包含vector中的元素类型。
(17)vector能容纳绝大多数的类型的对象作为其元素,但是因为引用不是对象,所以不存在包含引用的vector。
(18)定义和初始化vector对象:
                    vector<T> v1;
                    vector<T> v2(v1);
                    vector<T> v2 = v1;
                    vector<T> v3(n,val);
                    vector<T> v4(n);
                    vector<T> v5{a,b,c...};
                    vector<T> v6 = {a,b,c....};
 (19)注意初始化时大括号与小括号的区别:
                    vector<int> v1 = (10.1);    //v1有10个元素,每个值都是1        
                    vector<int> v2 = {10,1};     //v2有2个元素,值分别是10和1
                    vector<string> v3 = {"hi"};   //v3有一个元素
                    vector<string> v4 = ("hi");   //错误
                    vector<string> v5 = {10};     //v5有10个默认初始化的元素
                    vector<stirng> v6 = {10,"hi"};   //v6有10个值为“hi”的元素
(20)对vector进行赋值:
                    vector<int>  v2;
                    for(int i = 0; i != 100; ++i)
                        v2.push_back(i);
(21)使用范围for语句处理vector对象中的所有元素
                    vector<int> v{1,2,3,4,5,6,7,8,9};
                    for(auto &i : v)
                        i *= i;
                    for(auto i : v)
                        cout << i << " "  <<endl;
(22)真确的size_type使用方法
                     vector<int>::size_type;    //right
                     vector::size_type;            //error
(23)vector对象以及string对象的下标运算符可用于访问已存在的元素,而不能用于添加元素。
(24) 试图用下标形式去访问一个不存在的元素将引发错误,不过这种错误不会被编译器发现,而是在运行时产生一个不可预知的值。所谓缓冲器溢出就是指这类的错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值