c++复杂数据类型——多维数组、多级指针、 数组模板、 vector(动态数组)

多维数组

	// 一维数组
    int codes1[10] = {1,2,3};
    // 二维数组
    int codes2[5][10] =  {{1,2},{4,5},{},{},{1,2,3,4,5,6,7,8,9,200}};
    //{1,2,3,4,5,6,7,8,9,0,123/*codes2[1][0]*/};*/
    cout << "codes2[1][0] = " << codes2[1][0] << endl; //4
    cout << "codes2[4][9] = " << codes2[4][9] << endl; //200
    // 三维数组
    int codes3[5][10][100] = {{{1,2}/*codes3[0][0][...]*/,
    						   {4,5}/*codes3[0][1][...]*/}/*codes3[0][...]*/,
    						   {}/*codes3[1][...]*/};
    cout << "codes3[0][0][1] = " << codes3[0][0][1] << endl; // 2
    cout << "codes3[0][1][0] = " << codes3[0][1][0] << endl; // 4
    
    // 数组赋值指定索引数据
    codes1[0] = 123;
    codes2[0][0] = 445;
    codes3[0][0][2] = 234;

多级指针

    int *p1 = codes1;
    
    // int **pp2  = codes2; 语法报错
    int **pp2  = (int**)codes2;
   // cout << pp2[2][3] << endl; 虽然使用类型强制转换,语法不报错,但是调试会抛出异常,并不能使用强制类型转换后,通过指针使用数组
    
    int *pp1 = new int;
    int **ppp2 = (int**)new int[10][10];
    // **ppp2 = 3; 使用类型强制转换,语法不报错,但是调试会抛出异常
    
    // 多级指针正确赋值方法,使用指针数组赋值,且数组内每个成员必须new分配内存空间
    int* xyz[10];
    xyz[0] = new int;
    *xyz[0] = 3;
    
    int **pppp2 = new int*[10];
    for(int i =0; i < 10;i++) {
        *(pppp2+i) = new int[10];
    }
    
    **pppp2 = 203;
    **(pppp2 + 1) = 100; // 指针+1,代表[1][0],并不是[0][1]
   // cout << "**(pppp2 + 1) = " << pppp2[0][1] << endl; // 0
    cout << "**(pppp2 + 1) = " << pppp2[1][0] << endl; // 100

数组模板array

    //  数组和数组模板的区别
    //  1.  数组和数组模板在后期初始化上不同
	int codes1[3];
	codes1[0] = 200;

    array<int,size> codes;
    codes = {200,300,400};
    
	//  2.  数组的尺寸允许使用变量,但数组模板的尺寸不允许使用变量,但可以使用常量或数值
	int size = 3;
	int codes2[size];
	
	const int size1 = 3;
	// array<int,size> codes;  语法报错
    array<int,size1> codes;
    
    //  3.  数组在某种程度上可以当做指针使用,但数组模板不可以
    int abc[3] = {1,2,3};
    cout << "abc[0] = " << *abc << endl;

	array<string, 5> productNames = {"iPhone6", "iPhone6 Plus"};
	cout << "productNames [0] = " << productNames[0] << endl;
	
    //  4.  数组模板可以更容易获取数组的尺寸
    cout << "abc size is " << sizeof(abc)/sizeof(int) << endl;
    cout << "productNames size is " << productNames.size() << endl;
    
    //  5.  将数组赋给指针是引用复制,而数组模板之间的赋值是值的复制
    int codes2[]{1,2,3};
    int *pCodes = codes2;
    pCodes[0] = 321;
    cout << "codes2[0] = " << codes2[0] << endl; // 321
    
    array<int , 3> codes1;
    array<int,size> codes;
    codes = {200,300,400};
    codes1 = codes;
    codes1[0] = 123;
    
    cout << "codes1[0] = " << codes1[0] << endl; // 123
    cout << "codes[0] = " << codes[0] << endl; // 200

	// 不管是数组,还是数组模板,都不要超出最大的索引,超出索引会抛出异常,数组溢出
    

vector(动态数组)

vector可以作为数组或者栈使用

	#include <vector>

	vector<int> values;
    //  动态添加三个元素
    values.push_back(20);
    values.push_back(40);
    values.push_back(60);
    
    // 删除指定的元素
    values.pop_back();  //  出栈,删除最后一个元素
    values.erase(values.begin());  //  删除第1个元素
    values.erase(values.begin() + 1);  //  删除第2个元素

	// 遍历容器中所有元素
    for(int n:values)
    {
        cout << n << endl;
    }
    for(long i = size - 1; i>=0;i--)
    {
        cout << values[i] << endl;
    }
    
    // 获取vector容器size,即存储了多少个元素
    long size = values.size();
    cout << "values size = " << size << endl;
    
    // 获取指定索引的元素
    cout << values.at(0) << endl;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值