• C++ 数组和vector的基本操作


    1、静态数组的基本操作

    int a[5] = {0, 3, 4, 6, 2};

    1.1 数组的遍历

    1.1.1 传统的for循环遍历

    int size = sizeof(a) / sizeof(*a);
    for(int i = 0; i < size; i++)
        cout << a[i] << " ";

    sizeof()是一个操作符(operator),返回对象或类型所占内存空间的字节数。

    sizeof(a),返回数组a所占内存空间的字节数;sizeof(*a),返回数组a首元素所占内存空间的字节数。两者相除即为数组长度。

    1.1.2 C++11基于范围的for循环遍历

    for(int& item:a)
        cout << item << " ";

    for依次循环,item依次作为每个元素的引用。

    1.2 数组的sort排序

    #include <algorithm>
    using namespace std;

    sort()包含在头文件<algorithm>中,定义在命名空间std中。

    sort(a, a + size);
    for(int& item:a)
        cout << item <<" ";

    sort()可以传入三个参数。第一个参数为要排序数组的首地址,第二个参数为要排序数组的尾地址,第三个参数制定排序类型(从小到大or从大到小)。第三个参数可以省略,默认从小到大排;且第三个参数用起来比较麻烦,若有从大到小的需求,可以先从小到大排,之后倒序输出。

    2、基于vector容器的动态数组的基本操作

    数组的大小不能发生变化,需要在初始化时指定数组的大小。有时它会非常不方便并可能造成浪费。因此,大多数编程语言都提供内置的动态数组,它仍然是一个随机存取的列表数据结构,但大小是可以发生改变的。例如,在 C++ 中的vector。

    #include <vector>

    用到vector模板类时,要注意引用头文件<vector>。

    2.1 定义及初始化

    // 1. initialize
    vector<int> v0;
    vector<int> v1(5, 0);//v1有5个元素,均为0
    // 2. make a copy
    vector<int> v2(v1.begin(), v1.end());
    vector<int> v3(v2);
    // 3. cast an array to a vector
    int a[5] = {0, 1, 2, 3, 4};
    vector<int> v4(a, *(&a + 1));

    定义v4时,传入两个参数a和*(&a+1),两个都是指针。a指向数组的首元素地址,&a为指向数组指针的指针,加一后就直接跨越了一个数组长度,再用*取值后,*(&a + 1)为指向数组尾元素的地址。

    2.2 三种遍历方式

    cout << "[Version 1] The contents of v4 are:";
    for (int i = 0; i < v2.size(); ++i) {
    	cout << " " << v2[i];
    }
    cout << endl;
    
    cout << "[Version 2] The contents of v4 are:";
    for (int& item : v4) {
    	cout << " " << item;
    }
    cout << endl;
    
    cout << "[Version 3] The contents of v4 are:";
    for (auto item = v4.begin(); item != v4.end(); ++item) {
    	cout << " " << *item;
    }
    cout << endl;

    vector用方括号[]加数字的方式访问内部具体的某个元素。

    v.size()返回vector的长度。

    v.begin()返回vector的首地址,v.end返回vector的尾地址。

    auto自身并不是一种数据类型,其只是一种给对象自动匹配类型的机制。

    2.3 排序及在尾部插入、删除

    // sort
    sort(v4.begin(), v4.end());
    // add new element at the end of the vector
    v4.push_back(-1);
    // delete the last element
    v4.pop_back();

    v.push_back(x)在vector尾部添加元素x,v.pop_back()删除最后一个元素。

  • 相关阅读:
    WebContent的子目录里面的jsp文件无法将数据传递给Servlet
    MVC 与 三层架构
    使用命令行操作MySQL 及 语法
    JDBC
    字符典
    servlet 生命周期
    6 shell内置命令
    5shell中的数组
    4shell中的特殊变量
    3shell命令替换
  • 原文地址:https://www.cnblogs.com/HL-space/p/10546585.html
Copyright © 2020-2023  润新知