#include "../inc/arrary_.h"#include <string>#include <iostream>#include <cstring>#include <vector>using namespace std;constexpr int get_size(){return 42;}void arrary_init(){//不是常量表达式unsigned cnt = 42;//常量表达式constexpr unsigned sz = 42;//常量表达式const unsigned usz = 42;//包含10个整数int arr[10];//含有42个整形指针的数组int *parr[sz];//含有42个string的数组string strvec[usz];//含有42个int的数组string invec[get_size()];// 编译报错,因为cnt不是常量表达式// string bad[cnt];const unsigned msz = 3;//含有3个元素的数组,元素值分别为0,1,2int ia1[msz] = {0, 1, 2};//维度是3的数组int a2[] = {0, 1, 2};//等价于a3[] = {0,1,2,0,0}int a3[5] = {0, 1, 2};//等价于a4[] = {"hi","bye",""}string a4[3] = {"hi", "bye"};//错误,初始值过多// string a5[2] = {0, 1, 2};}void array_error(){// 错误用法,不允许用数组初始化数组//含有3个整数的数组// int a[] = {0,1,2};//不允许用一个数组初始化另一个数组// int a2[] = a;//不能把一个数组直接赋值给另一个数组// a2 = a;}void dif_array(){// ptrs是含有10个整形指针的数组int *ptrs[10];//不存在引用的数组// int &refs[10] = /*?*/;int arr[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};// 数组的引用 arrRef是arr的引用int(&arrRef)[10] = arr;// Parray指向一个含有10个整数的数组int(*Parray)[10] = &arr;}void visit_array(){//以10分为一个分数段统计成绩,0~9,10~19...,90~99,100// 11 个分数段,全部初始化为0unsigned scores[11] = {};unsigned grade;while (cin >> grade){if (grade <= 100){++scores[grade / 10];}}//通过for range 遍历打印for (auto i : scores){cout << i << " ";}cout << endl;}void pointer_array(){//数组的元素是string元素string nums[] = {"one", "two", "three"};// p指向nums的第一个元素string *p = &nums[0];// ia是一个含有10个整数的数组int ia[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};// ia2是一个整数型指针,指向ia第一个元素auto ia2(ia);//错误:ia2是一个指针,不能用int值给指针赋值// ia2 = 42;// ia2是int*类型// auto ia2(&ia[0]);// ia3是一个含有10个整数的数组decltype(ia) ia3 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int *pint = nullptr;//错误,不能用整形指针给数组赋值// ia3 = pint;//正确,可以对数组的元素赋值ia3[4] = 1024;}void pointer_op(){int arr[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};int *p = arr; // p指向arr的第一个元素++p; // p指向arr[1]int *e = &arr[10]; //指向arr尾元素的下一个位置的指针for (int *b = arr; b != e; ++b)cout << *b << endl;for (int i = 0; i < sizeof(arr) / sizeof(int); i++){cout << arr[i] << endl;}// beg指向arr第一个元素int *beg = begin(arr);// last指向arr最后一个元素的下一个位置int *last = end(arr);while (beg != last){cout << *beg << endl;beg++;}//等价于int *p = &arr[0]int *ip = arr;//等价于ip2指向arr的第四个元素int *ip2 = ip + 4;int length = last - beg;cout << length << endl;}void c_string(){const char cal1[] = "A string example";const char cal2[] = "A different string";if (strcmp(cal1, cal2) < 0){cout << "cal1 is less than cal2" << endl;}else{cout << "cal2 is less than cal1" << endl;}const int total_len = strlen(cal1) + strlen(cal2) + 1;//开辟total_len字节的空间char *total_str = new char(total_len);//将空间清空为0memset(total_str, 0, total_len);//将cal1 copy 到 total_strstrcpy(total_str, cal1);//将total_str和cal2连接strcat(total_str, cal2);//输出total_str 的值cout << "total_str is " << total_str << endl;//最后释放内存if (total_str != nullptr){delete total_str;total_str = nullptr;}string strcpp = "CPP";const char *strc = strcpp.c_str();}void vector_init2(){vector<int> v1 = {1, 3, 5, 7, 9};vector<int> v2(v1);for (auto v : v2){cout << v << endl;}int a[] = {2, 4, 6, 8, 10};vector<int> v3(begin(a), end(a));for (auto v : v3){cout << v << endl;}}void multi_array(){//大小为3的数组,每个元素是含有4个整数的数组int ia[3][4];//大小为10的数组,他的每个元素都是大小为20的数组//这些数组的元素是含有30个整数的数组int arr[10][20][30] = {0};}void multi_init(){//三个元素,每个元素大小都是4的数组int ia[3][4] = {{0, 1, 2, 3},{4, 5, 6, 7},{8, 9, 10, 11}};//可以用一个花括号初始化二维数组int ib[3][4] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};//显示初始化每行的首元素int ic[3][4] = {{0}, {4}, {8}};//显示初始化第一行,其他元素被初始化为0int id[3][4] = {0, 3, 4, 6};}void multi_index(){int arr[3][3][3] = {0,1,2,};//用arr的首元素为ia最后一行的最后一个元素赋值int ia[3][4] = {0};ia[2][3] = arr[0][0][0];// row是一个ia第二个元素数组的引用,包含四个元素int(&row)[4] = ia[1];//遍历constexpr size_t rowCnt = 3, colCnt = 4;for (size_t i = 0; i != rowCnt; ++i){//对于行内的每一列for (size_t j = 0; j != colCnt; ++j){//将元素的位置索引作为他的值ia[i][j] = i * colCnt + j;}}size_t cnt = 0;for (auto &row : ia){for (auto &col : row){col = cnt++;}}for (auto &row : ia){for (auto col : row){cout << col << endl;}}}void multi_pointer(){//大小为3的数组,每个元素是含有4个整数的数组int ia[3][4];// p指向含有4个整数的数组int(*p)[4] = ia;// p指向ia的尾元素p = &ia[2];//整数指针的数组int *ib[4];//指向含有4个整数的数组// int(*ib)[4];// p指向一个含有4个整数的数组for (auto p = ia; p != ia + 3; ++p){// q指向4个整数数组的首元素,也就是说q指向一个整数for (auto q = *p; q != *p + 4; q++){cout << *q << ' ';}cout << endl;}// p指向ia的第一个数组for (auto p = begin(ia); p != end(ia); p++){// q指向内层数组的首元素for (auto q = begin(*p); q != end(*p); q++){//输出q所指的整数cout << *q << ' ';}cout << endl;}}void typedef_pointer(){// C11新标准定义类型别名// int_array 是一个包含四个元素的整形数组类型using int_array = int[4];//等价的typedef声明// int_array_same 是一个包含四个元素的整形数组类型typedef int int_array_same[4];//如果不会用typedef定义数组类型,可以先定义一个数组变量int int_array_inst[4];//然后加上typedef即可,//此时int_array_inst就是一个大小为4的整形数组类型// typedef int int_array_inst[4];int ia[3][4];//输出ia中每个元素的值,每个内层数组各占一行for (int_array *p = ia; p != ia + 3; p++){for (int *q = *p; q != *p + 4; q++){cout << *q << ' ';}cout << endl;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。