C++ 使用问题记录

C++ 使用问题记录

  1. 将vector 转化为 vector:

    1
    2
    std::vector<char> v;
    std::string str(v.begin(), v.end());
  2. 字符数组与string的相互转换:

    字符数组转化成string类型
    char ch [] = “ABCDEFG”;
    string str(ch);//也可string str = ch;
    或者
    char ch [] = “ABCDEFG”;
    string str;
    str = ch;//在原有基础上添加可以用str += ch;

    将string类型转换为字符数组
    char buf[10];
    string str(“ABCDEFG”);
    length = str.copy(buf, 9);
    buf[length] = ‘\0’;
    或者
    char buf[10];
    string str(“ABCDEFG”);
    strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);

  3. Vector元素的遍历和修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    /*************************************************************************
    > File Name: vector.cpp
    > Author:
    > Mail:
    > Created Time: Thu 13 Apr 2017 08:57:25 PM CST
    ************************************************************************/

    #include<iostream>
    #include<vector>
    using namespace std;
    int main()
    {
    vector<int> ivec;
    for(int i = 0; i < 10; ++i)
    ivec.push_back(i);

    //遍历vector元素
    //1: 利用迭代器
    for(auto it = ivec.begin(); it != ivec.end(); ++it)
    cout<<*it<<" ";
    cout<<endl;
    //2: 利用下标操作符
    for(auto i = 0; i < ivec.size(); ++i)
    cout<<ivec[i]<<" ";
    cout<<endl;
    //3: 利用范围for循环
    for(auto i : ivec)
    cout<<i<<" ";
    cout<<endl<<endl;


    //修改vector中的元素(前提条件是vector中已有元素,且以下方式均不能改变已有元素的个数)
    //1: 利用迭代器
    for(auto it = ivec.begin(); it != ivec.end(); ++it)
    {
    *it = *it * 2;
    cout<<*it<<" ";
    }
    cout<<endl;
    //2: 利用下标操作符
    for(auto i = 0; i < ivec.size(); ++i)
    {
    ivec[i] = ivec[i] * 2;
    cout<<ivec[i]<<" ";
    }
    cout<<endl;
    //3: 利用范围for循环
    for(auto &i : ivec)//注意此处是引用
    {
    i = i * 2;
    cout<<i<<" ";
    }
    cout<<endl;

    return 0;
    }
  4. C++ std::vector指定位置插入

    1.初始化vector,一般有这几种方式:

    1
    2
    3
    4
    5
    std::vector<std::wstring> v1;                //创建一个空的wstring类型的vector
    std::vector<std::wstring> v2(3, "c"); //创建一个容量为3,全部初始化L"c"
    std::vector<int> v3(5); //创建容量为5,数据类型为int的vector
    std::vector<int> v4(v3); //创建一个从v3拷贝过来的vector
    std::vector<int> v5 = {1,2,3,4,5,6,7}; //C++11才支持,直接值初始化,最方便

    第五种方法: vector v5{1,2,3.0,4,5,6,7};

    v5初始化为列表中元素的拷贝,列表中元素必须与v5的元素类型相容,本例中必须是与整数类型相容的类型,整形会直接拷贝,其他类型会进行类型转换

    2.在指定位置插入元素:

    1
    2
    3
    4
    5
    6
    7
    v2.insert(v2.begin()+4, "3");   //在指定位置,例如在第五个元素前插入一个元素

    v2.insert(v2.end(), "3"); //在末尾插入一个元素

    v2.push_back("9"); //在末尾插入一个元素

    v2.insert(v2.begin(), "3"); //在开头插入一个元素

    3.删除数据:

    v2.erase(v2.begin()); //删除开头的元素
    
    v2.erase(v2.begin(),v2.end); //删除[begin,end]区间的元素
    
    v2.pop_back();   //删除最后一个元素

    4.vector其他函数介绍:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
       函数                                   说明

    c.assign(beg,end) //将[beg; end)区间中的数据赋值给c。

    c.assign(n,elem) //将n个elem的拷贝赋值给c。

    c.at(idx) //传回索引idx所指的数据,如果idx越界,抛出out_of_range。

    c.back() //传回最后一个数据,不检查这个数据是否存在。

    c.begin() //传回迭代器中的第一个数据地址。

    c.capacity() //返回容器中数据个数。

    c.clear() //移除容器中所有数据。

    c.empty() //判断容器是否为空。

    c.end() //指向迭代器中的最后一个数据地址。

    c.erase(pos) //删除pos位置的数据,传回下一个数据的位置。

    c.erase(beg,end) // 删除[beg,end)区间的数据,传回下一个数据的位置。

    c.front() //传回第一个数据。

    get_allocator //使用构造函数返回一个拷贝。

    c.insert(pos,elem) //在pos位置插入一个elem拷贝,传回新数据位置。

    c.insert(pos,n,elem) //在pos位置插入n个elem数据。无返回值。

    c.insert(pos,beg,end) //在pos位置插入在[beg,end)区间的数据。无返回值。

    c.max_size() //返回容器中最大数据的数量。

    c.pop_back() //删除最后一个数据。

    c.push_back(elem) //在尾部加入一个数据。

    c.rbegin() //传回一个逆向队列的第一个数据。

    c.rend() //传回一个逆向队列的最后一个数据的下一个位置。

    c.resize(num) //重新指定队列的长度。

    c.reserve() //保留适当的容量。

    c.size() //返回容器中实际数据的个数。

    c1.swap(c2) //将c1和c2元素互换。

    swap(c1,c2) //同上操作。

    vector<Elem> c //创建一个空的vector。

    vector<Elem> c1(c2) //复制一个vector。

    vector <Elem> c(n) //创建一个vector,含有n个数据,数据均已缺省构造产生。

    vector <Elem> c(n, elem) //创建一个含有n个elem拷贝的vector。

    vector <Elem> c(beg,end) //创建一个以[beg;end)区间的vector。

    c.~ vector <Elem>() //销毁所有数据,释放内存。

    operator[] //返回容器中指定位置的一个引用。