zoukankan      html  css  js  c++  java
  • C++primer学习笔记(一)——Chapter 3

    3.1 Namespace using Declarations

    1、因为C++里有名字空间的定义,例如我们使用cin的时候必须写成std::cin,如果就用一次还是可以接受的,但是如果一直都这样,那就很麻烦了。所以C++使用了一个姓的关键字using。

    (1)第一种用法:

    例如:using namespace std; 这样子的话就可以使用std名字空间下面所有的方法而不用加std::。

    (2)第二种用法:

    例如:using std::cin; 这样子的就只能cin前面不加std::,而其他的,如cout还是要加上名字空间的。

    2、一般using方法不放在头文件里面,因为头文件可能被多个cpp文件引用,那cpp文件相应的也使用了using,但有时候我们会存在两个名字空间的方法名字是一样的,这时候就会出现问题。

    3.2 Library string Type

    **首先当然是头文件和名字空间的引用啦

    #include <string>
    using std::string;

    1、初始化string的方法

    (1)string s1;             创建一个空的字符串

    (2)string s2(s1);       s2通过拷贝s1创建

    (3)string s2 = s1;      同(2),

    (4)string s3("value");        s3是通过拷贝一个字符串创建的,但没有包括'';

    (5)string s4(n,'c');            创建一个n个c的string;

    PS:通过‘=’创建的方法是间接创建的方法(重载‘=’),而()则是直接创建的方法(重载构造函数)。

    2、string的操作

    os<<s;

    is>>s;                     不接受空格,开始有空格直接忽略,碰到空格直接停

    getline(is ,s);           将一行的输入读取,包括空格,直到遇到换行符

    s.empty();               判断s是否为空

    s.size();                  计算s的长度

    s[n];                       返回一个在s第n位置的字符的引用。

    s=s1+s2;                    将s2copy在s1的后面,然后给s;

    s1=s2;                       赋值

    s1==s2;                   

    s1!=s2;

    <,<=,>,>=

    比较的规则:就是依据ASCII表进行比较,不再多说。

    PS:(1)s.size();的返回值是一个新的类型size_type,具体是什么,由于代码是封闭的,无法得知,但是它是一个无符号的类型,而且可以存非常非常大的一个数字,记得不要认为返回值是int等等的。

          (2)对于+,+=操作是,最左边一定是一个string类型的变量。

    3、string中的字符的相应操作

    isalnum(c)       如果是字母或者数字的话返回true;

    isalpha(c)        如果是字母的话返回true;

    iscntrl(c)          如果是操作字符的话返回true;

    isdigit(c)         如果是数字的话返回true;

    isgraph(c)        如果不是空格而且能打印出来的返回true;

    islower(c)        如果是小写字符的话返回ture;

    isprint(c)         如果能打印出来的话返true;

    ispunct(c)        如果c不是一个操作字符的话返回true;

    isspace(c)        如果是空格的话返回true;

    isupper(c)        如果是大字字母的话返回true;

    isxdigit(c)        如果是十六进制的数返回true;

    tolower(c)       如果是大写字母,返回对应的小写字母。

    toupper(c)       跟上面相反。

    PS(1)遍历string中每个字母的新方法(新11特性)

                for(declaration :  expression)

                      statement;

              declaration:就是用来存从string中拿出的每个字母。可以有赋值和引用2种,就和数组的形参是一个意思。

              expression:  就是string类型的变量。

              statement:   就是statement;

       e.g     for(auto c:str)                   for(auto &c:str)

                {                                     {
                }                                     }

       (2)可以用decltype()方法来给出变量类型

         e.g    decltype(s.size())   count;     就可以很方便的定义一个不知道是啥类型的新变量;

       (3) 以.h结束的头文件是C版本的,是没有名字空间的,而以c开头的头文件是c++版本的,含有名字空间。

    3.3 Library vector Type

    **首先当然是头文件和名字空间的引用啦

    #include <vector>
    using std::vector;

    1、定义,初始化vector

    (1)vector<T> v1       创建一个空的存放T类型的vector;

    (2)vector<T> v2(v1)        通过拷贝v1来创建v2;

    (3)vector<T> v3(n,val)       创建一个v3,其中含有n个值为val的数据;

    (4)vector<T> v4(n)            创建一个还有n个初始化的变量  

    (5)vector<T> v5{a,b,c……}         创建一个v5,其中含有的数据为a,b,c,d……

    (6)vector<T> v5={a,b,c……}       同(5)

    2、vector的相关操作

    (1)向vector中加入元素

    e.g  

    vector<string> text;
    string word;
    while(cin>>word)
    {
           text.push_back(word);
    }

    (2)v.empty()            如果是空的返回true;

    (3)v.size()                返回v的长度;

    (4)v[n]                    返回第n个位置的引用;

    (5)v1=v2                 用v2的元素取代v1;

    (6)v={a,b,c……}        用a,b,c……来取代v中的元素;

    (7)还有就是比较等等的判断。

    3.4  循环(略过……)

    3.5 Arrays

    1、定义及初始化数组

    (1)定义空数组

          int  arr[n];       //首先必须有类型,不能用auto来推测,还有就是n必须是常量,还有其中的value是随机的;

    (2)定义+初始化

         int a1[]={0,1,2};       //自动设定长度为3;

         int a2[5]={1,3};       //等同于a2[5]={1,3,0,0,0}

         int a3[2]={2,4,5};   // error,元素个数超过数组长度

    (3)没有string,和vector的赋值copy的定义初始化方法

    (4)复杂的数组(纯翻译)

           int arr[10];

           int (*Parray)[10]  = &arr;

           int (&arrRef)[10] = arr;         //引用

    2、访问数组中的元素

    (1)遍历

      for(auto i:score)
    
        cout<<i<<endl;

    (2)访问其中的一个

         array[3],访问第4个元素,因为标号从0开始

    3、指针与数组。

        不多说,列一些我觉得比较重要的地方把

    (1)首先,数组名可以理解为一个常指针,不可以改变其指向,其指向数组头,即array[0]。

    (2)array = &array[0]

    (3)在发生数组长度改变的时候,一定要注意你原先指向尾部的指针已经废掉了。切记切记。

    4、C版本的string

    (1)定义

            char a="Hello World!";

    (2)方法

           strlrn(a);   测数组长度(不包括末尾的‘’)

           strcmp(p1,p2)        比较p1和p2,如果p1>p2,那么返回一个正值, 如果p1=p2,那么返回0,如果p1<p2,那么返回一个负值,

          strcat(p1,p2)          将p2加到p1的后面

          strcpy(p1,p2)         将p2拷贝到p1;

    (3)新旧版本的转换

          char a[] = b.c_str();

  • 相关阅读:
    parallel-fastq-dump是一个大坑
    生信软件安装(2)
    2018年一些感悟
    raw data/PF data/Q30 data/clean data的不同
    专题
    结构体
    指针和数组
    指针
    函数的声明
    C语言中的函数
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/3912776.html
Copyright © 2011-2022 走看看