C++ 复合类型(三)--数组vector、array

本文深入探讨C++中的两种重要复合类型——std::vector和std::array。通过实例分析,详细解释了它们的用法、特点及在内存管理上的差异,帮助开发者更好地理解和选择合适的数据结构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


#include <iostream>
#include <cstring>
#include <vector>
#include <array>
using namespace std;
int qq = 0;
const int q = 1;
int const q2 = 10;
const int *b = &qq;
int const *b2 = &qq;
int *const b3 = &qq;

char *getName(char *);
//结构体
struct nameStr {
    int a = 0;
};

//枚举
enum Name {
    Name_a = 1,
    Name_b = 2,
    Name_c = 3,
};

//模板类 vector
void vectorV();

//模板类 array
void arrayA();


int main(int argc, const char * argv[]) {

    
    qq = 20;
    int qz = 30;
    b = &qz;
    
    cout << &b << "地址";
    
    char *name = "sdfffsdfsdflsldfkdkfk**@@lsdkdkdkkkf;;\"\"";
    name = getName(name);
    //1、释放内存
    delete [] name;
    
    
    //2、C++ 枚举
    Name n;
    n = Name_b;
    switch (n) {
        case Name_a:
            ;
            break;
            
        case Name_b:
            ;
            break;
            
        case Name_c:
            ;
            break;
        default:
            break;
    }
    
    
    //3、模板类vector
    vectorV();
    
    
    //4、模板类array
    arrayA();
    
    
    
    
    return 0;
}


void vectorV()
{
    //模板类替代动态数组,delete和new都是自动完成
    //类似于string类,也是一种动态数组。您可以在运行阶段设置vector对象的长度,可在 末尾附加新数据,'还可在中间插入新数据。基本上,它是使用new创建动态数组的替代品
    //缺点:效率比动态数组稍差
    //优点:功能强大
    
    //初始化一个0长度的整型数组
    vector<int> vi;
    
    //初始化一个固定长度双精度数组
    int num = 2;
    vector<double> vd(num); //vd(x) x可以是常量也可以是变量,代表数组元素个数
    
    
}



void arrayA()
{
    //和vector不一样,不能使用变量作为 array<int,num> 的元素个数
    int num = 5;
    
    //*****初始化
    //一个包含5个无初始值整型元素的数组
    array<float, 4> ari;
    
    //一个包含4个浮点型元素的数组
    array<float, 4> arf = {1.0f,2.3,4.0,20};

    //两个array赋值,只有相同元素个数和属性才可以
    ari = arf;
    
    
    //*****成员函数 at() 替换下标元素
    ari.at(1) = 222;
    ari[1] = 333;  //简化替换模式
    
    
    //*****成员函数 data()
    char q = 'a';
    char q2[] = {"sdfsdf"};
    char q3[] = {"uuueeo"};

    char *ac = q2;
    char *bc = q3;
    
    array<char *, 2> arc = {ac,bc};
    array<char , 4> arc2 = {'a','c','d','f'};

    char **c = arc.data();
    char *c2 = arc2.data();
    cout << c+1 << "sdf" << endl;
    
    //data操作
    const array<float,6>array3={34,23,45,12,22,56};
    array<float,6>array2;
    memcpy(array2.data(),array3.data(),sizeof(float)*4);
    
    
    //*****成员函数 begin() end() 用于迭代器
    auto begin = ari.begin(); //首地址
    float *end = ari.end();   //结束地址
    
    
    //*****遍历元素
    //顺序遍历
    for (auto i = begin; i!=end; i++) { //循环数组元素
        cout << *i << "i\n";
    }
    
    for (float& x : ari)  //类型似于OC的 for in快速枚举
    {
        cout << "x=" << x << endl;
    }
    
    //逆序遍历
    for (auto i = ari.rbegin(); i != ari.rend(); i++) {
        cout << "i=" << *i << endl;
    }
    
    for (auto i = ari.crbegin(); i != ari.crend(); i++) {
        cout << "conts不可变=" << *i << endl;
    }
    
    
    //*****成员函数 front back size
    cout<<ari.front()<<endl;  //输出第一个元素
    cout<<ari.back()<<endl;   //输出最后一个元素
    cout<<"size is :"<<ari.size()<<endl; //输出大小
    cout<<"max size is:"<<ari.max_size()<<endl;
    cout<<endl;
    
}


char *getName(char *name)
{
    //根据输入内容大小分配内存
    char *newName = new char[strlen(name)+1];
    strcpy(newName, name);
    
    return newName;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值