【C++】数组及基本操作


ps:更多数据结构知识详见:
常见数组结构与算法

数组:

数组与vector:如果不确定元素的个数,请使用vector。

数组声明:

数组声明:a[d],a是数组名,d是数组的维度(维度必须大于0并且是个常量表达式)
        常量表达式:值不会改变并且在编译过程就能得到计算结果的表达式。

//一个对象是不是常量表达式:
const int max = 20;        //是常量表达式
const int limit = max+1;   //是常量表达式
int size = 15;             //不是常量表达式,是普通int而不是const int
const int a = get_size();  //不是常量表达式,a本身是一个常量,但是具体值需要在运行时才能获取

复杂数组的声明
默认情况下,类型修饰符从右向左依次绑定(从内向外)

int *a[10];    //包含10个指向int类型指针的数组(指针数组)
int (*a)[10];  //指向大小为10的整型数组的指针(数组指针)
int *(&a)[10]; //a是一个数组的引用,数组包含10个指针

数组初始化:

一维数组的初始化

//静态:
int value[10];
int value[10]={1,2};
double balance[] = {1000.0, 2.0, 3.4, 7.0, 50.0};

//动态:
int* array = new int[100]; 
delete []array;

int* array = new int[100]{1,2};  //初始化前两个元素
delete []array; 

二维数组初始化

//静态:
int a[5][6];

//动态:
int (*arr)[6]= new int[5][6];
delete[] arr;

数组常见操作:

访问数组元素

double a = b[9];

返回数组的大小

int a[]={1,2,3,4};
int num = sizeof(a)/sizeof(a[0]);

不允许拷贝和赋值

int a[]={1,2,3};
int b[]=a;  //错误
b=a;        //错误

vector初始化:

vector<int> vec;        //声明一个int型向量
vector<int> vec(5);     //声明一个初始大小为5的int向量
vector<int> vec(10, 1); //声明一个初始大小为10且值都是1的向量

vector<int> tmp;
vector<int> vec(tmp);   //声明并用tmp向量初始化vec向量

vector<int> tmp(vec.begin(), vec.begin() + 3);  //用向量vec的第0个到第2个值初始化tmp

vector常见操作:

vector常用函数汇总

  1. push_back 在数组的最后添加一个数据
  2. insert 增加
  3. pop_back 去掉数组的最后一个数据
  4. clear 清空当前的vector
  5. erase 删除
  6. at 得到编号位置的数据
  7. front 得到数组头的引用 (begin、end返回的是指针)
  8. back 得到数组的最后一个单元的引用
  9. begin 返回第一个元素的指针
  10. end 返回最后一个元素的指针
  11. size 当前使用数据的大小
  12. max_size 最大可允许的vector元素数量值
  13. capacity vector实际能容纳的大小
  14. empty 判断vector是否为空
  15. swap 交换
  16. assign 使用括号内的值设置当前的vector

vector常用函数详解
1.增加函数
        push_back()
        insert()

//使用push_back():
vector<int> arr;
for (int i = 0; i < 10; i++){
	arr.push_back(i);
}
//使用insert()
v.insert(v.begin(),8);  //在最前面插入新元素。  
v.insert(v.begin()+2,1);//在迭代器中第二个元素前插入新元素  

v.insert(v.end(),3,1);//在迭代器的最后一个元素后增加3个1

v.insert(v.end(),v2.begin(),v2.end());//在迭代器的最后一个元素后增加v2中的数据

2.删除函数
        pop_back()
        erase()
        clear()只能清除vector里面的数据,但是内存空间没有释放,如果要释放内存空间,使用arr.swap(vector<int> ());

//使用pop_back()
arr.pop_back();
//使用erase()
arr.erase(arr.begin()+3); //删除第3位元素

arr.erase(arr.begin()+2,arr.begin()+4); //删除arr里面[2,3)的元素(删除第2个元素)
//使用clear()
arr.clear();

3.遍历函数
        at()
        front()
        back()
        begin()
        end()

//使用at()
arr.at(3);   //vector中第三位的数值
//使用front()和back()
int front = arr.front();
int back= arr.back();
//使用begin()和end()
vector<int>::iterator iter;
iter = arr.begin()+4;
cout << *iter << endl;

//使用begin()实现遍历
for(vector<int>::iterator iter=arr.begin();iter!=arr.end();++iter){
	cout<<" "<<*iter;
}

4.判断函数
        empty() 返回bool,但是也可以用0,1

//使用empty()
cout << boolalpha;   //不设定返回0/1
cout << " arr.empty(): " << arr.empty() << endl;

5.大小函数
        size() vector中元素的个数
        capacity() vector实际能容纳的大小
        max_size() 最大可允许的vector元素数量值

int size = arr.size();
int cap = arr.capacity();
int max = arr.max_size();

6.其他函数
        swap()
        assign() 使用括号内的值设置当前的vector

//使用swap()
vector<int> arr(4,10);
arr.swap(vector<int> ());
vector<int>().swap(arr);
//使用assign()
vector<int> arr;
vetor<int> first(4,10);
arr.assign(7,3);             //分配七个3
arr.assign(first.begin(),first.end()); 
  • 53
    点赞
  • 254
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: C++中的数组是一种线性数据结构,可以用来存储一组相同类型的元素。数组基本操作包括创建、初始化、访问、修改和删除元素等。 创建数组可以使用以下语法: ``` type arrayName[arraySize]; ``` 其中,type表示数组元素的数据类型,arrayName表示数组的名称,arraySize表示数组的大小。 例如,以下代码创建了一个包含5个整数的数组: ```c++ int myArray[5]; ``` 初始化数组可以使用以下语法: ```c++ type arrayName[arraySize] = {value1, value2, ..., valueN}; ``` 其中,value1、value2、...、valueN表示数组元素的初始值。 例如,以下代码创建了一个包含5个整数的数组,并将第一个元素初始化为1,其余元素初始化为0: ```c++ int myArray[5] = {1, 0, 0, 0, 0}; ``` 访问数组元素可以使用以下语法: ```c++ arrayName[index]; ``` 其中,index表示要访问的元素的下标,下标从0开始。 例如,以下代码访问了myArray数组的第三个元素: ```c++ int x = myArray[2]; ``` 修改数组元素可以使用以下语法: ```c++ arrayName[index] = newValue; ``` 其中,newValue表示要修改的新值。 例如,以下代码将myArray数组的第二个元素修改为2: ```c++ myArray[1] = 2; ``` 删除数组元素在C++中并不支持,但可以通过修改元素的值实现类似删除元素的效果。 矩阵乘法是一种常见的数组应用,其实现过程如下: ```c++ #include <iostream> using namespace std; const int N = 3; // 矩阵维度 int a[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 矩阵a int b[N][N] = {{9, 8, 7}, {6, 5, 4}, {3, 2, 1}}; // 矩阵b int c[N][N]; // 结果矩阵 int main() { // 矩阵乘法 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { int sum = 0; for (int k = 0; k < N; k++) { sum += a[i][k] * b[k][j]; } c[i][j] = sum; } } // 输出结果矩阵 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { cout << c[i][j] << " "; } cout << endl; } return 0; } ``` 上述代码中,a和b分别表示两个矩阵,c表示结果矩阵。矩阵乘法的实现使用了三重循环,其中第一重和第二重循环用于遍历结果矩阵的每一个元素,第三重循环用于计算结果矩阵中当前元素的值。最后,将结果矩阵输出即可。 ### 回答2: C语言中,对数组基本操作包括定义数组、访问数组元素、给数组元素赋值、数组元素的运算等。 定义数组可以使用如下的语法: 数据类型 数组名[数组大小]; 例如:int numbers[5]; // 定义一个包含5个整数的数组 访问数组元素时,可以使用下标来索引数组元素,下标从0开始,最大下标为数组大小减1。 例如:numbers[0] = 10; // 给数组第一个元素赋值为10 printf("%d", numbers[0]); // 打印数组第一个元素的值 除了单个元素的操作数组元素之间也可以进行运算,如相加、相减、相乘等。 应用矩阵乘法时,可以使用二维数组来表示矩阵,并利用循环进行矩阵乘法的计算。 以下是一个示例代码: ``` #include <stdio.h> #define ROW1 2 // 第一个矩阵的行数 #define COL1 3 // 第一个矩阵的列数 #define ROW2 3 // 第二个矩阵的行数 #define COL2 2 // 第二个矩阵的列数 int main() { int matrix1[ROW1][COL1] = {{1, 2, 3}, {4, 5, 6}}; // 第一个矩阵 int matrix2[ROW2][COL2] = {{7, 8}, {9, 10}, {11, 12}}; // 第二个矩阵 int result[ROW1][COL2] = {0}; // 存储结果的矩阵 // 矩阵乘法计算 for (int i = 0; i < ROW1; ++i) { for (int j = 0; j < COL2; ++j) { for (int k = 0; k < COL1; ++k) { result[i][j] += matrix1[i][k] * matrix2[k][j]; } } } // 打印结果矩阵 for (int i = 0; i < ROW1; ++i) { for (int j = 0; j < COL2; ++j) { printf("%d ", result[i][j]); } printf("\n"); } return 0; } ``` 以上代码是两个矩阵相乘的例子,通过循环遍历两个矩阵的元素,利用矩阵乘法的规则计算得到结果矩阵,并将结果矩阵打印出来。 ### 回答3: C语言中,数组基本操作包括定义数组数组元素的初始化、数组的存取、数组的遍历、以及数组元素的修改等。 1. 定义数组:在C语言中,可以使用以下方式定义数组: - 声明数组类型和数组名:`数据类型 数组名[数组长度]`。例如:`int arr[5];` - 声明数组类型、数组名和初始化元素:`数据类型 数组名[数组长度] = {元素1, 元素2, ..., 元素n};`。例如:`int arr[5] = {1, 2, 3, 4, 5};` 2. 数组元素的存取和修改:使用数组名和索引值来访问和修改数组元素。例如: - 存取数组元素:`数组名[索引值]`。例如:`arr[0]`表示访问数组arr的第一个元素。 - 修改数组元素:`数组名[索引值] = 新的值`。例如:`arr[0] = 10`将数组arr的第一个元素修改为10。 3. 数组的遍历:通过循环结构可以遍历访问数组的所有元素。 - 使用for循环:结合数组长度,通过循环控制变量来遍历数组的每个元素。 - 使用while或do-while循环:借助循环变量+索引来遍历数组的每个元素。 矩阵乘法是指两个矩阵相乘的操作,在C语言中可以通过数组的方式实现。对于两个矩阵A和B,若A是m行n列的矩阵,B是n行p列的矩阵,它们的乘积C是m行p列的矩阵。 矩阵乘法的操作如下: 1. 定义三个二维数组A、B和C,分别表示矩阵A、B和结果矩阵C。 2. 使用嵌套循环遍历C的行和列,每次计算C[i][j]的值。其中,i表示C的当前行数,j表示C的当前列数。 - 对于C中的每个元素C[i][j],利用循环遍历A中的第i行和B中的第j列的元素,将相应元素相乘并累加结果,即C[i][j] = A[i][0]*B[0][j] + A[i][1]*B[1][j] + ... + A[i][n-1]*B[n-1][j]。 3. 打印结果矩阵C。 通过以上步骤,可以实现矩阵乘法的功能。需要注意的是,矩阵乘法有一定的前提条件,即第一个矩阵的列数必须等于第二个矩阵的行数。以及乘法的结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值