2D可变大小阵列c++
2D variable sized array c++
我想熟悉c++中的2D可变大小数组,所以我写了一个小程序,但它不起作用。这是代码:
#include <iostream>
using namespace std;
int main(){
int a,i;
cin>>a; //the width of the array is variable
int **p2darray;
p2darray = new int*[2]; //the height is 2
for (i = 0; i < 2; i++){
p2darray[i] = new int[a];
}
i=0;
while(i!=a){
p2darray[0][i]=i; //filling some numbers in the array
p2darray[1][i]=2*i;
i++;
}
i=0;
while(i!=a){
cout<<p2darray[0][i]<<endl;
cout<<p2darray[1][i]<<endl;
i++;
}
return 0;
}
那为什么它不起作用呢?
主要问题是,当您说p2darray[i][0]
时,您的索引是向后的,因为您将第二个维度设置为用户输入的大小,但您将第一个维度递增为该数字。这通常会导致segfault。在所有四种情况下都应该是p2darray[0][i]
。在进入打印循环之前,您也没有将i
设置回0,因此它跳过了整个打印过程。
有关说明上述校正的运行程序,请参阅此处。
您忘记重置i
。
i=0;
while(i!=a){
p2darray[i][0]=i; //filling some numbers in the array
p2darray[i][1]=2*i;
i++;
}
// Now i == a, so the next loop doesn't run
while(i!=a){
cout<<p2darray[i][0]<<endl;
cout<<p2darray[i][1]<<endl;
i++;
}
在两个循环之间插入i = 0;
。
此外,索引的顺序错误,第一个索引只能取值0和1,否则您将访问分配区域之外的内存。
i=0;
while(i!=a){
p2darray[0][i]=i; //filling some numbers in the array
p2darray[1][i]=2*i;
i++;
}
i = 0;
while(i!=a){
cout<<p2darray[0][i]<<endl;
cout<<p2darray[1][i]<<endl;
i++;
}
是正确的。
为什么不把2d数组放在函数中呢。
#include <iostream>
using namespace std;
int** CreateArray(int valuea, int valueb)
{
int** array;
array = new int *[valuea];
for(int i =0;i< row;i++)
{
array[i] = new int [valueb];
}
return array;
}
那么你一定不要忘记归还记忆。
int main(){
int a;
int i = 0;
cin>>a;
int** array = CreateArray(a,i);
while(i!=a){
array[i][0]=i;
array[i][1]=2*i;
i++;
}
i=0;
while(i!=a){
cout<<array[i][0]<<endl;
cout<<array[i][1]<<endl;
i++;
}
return 0;
}
C++中的2D可变大小阵列
#include <bits/stdc++.h>
using namespace std;
int main(){
int row,col,i,j;
cin>>row; //no. of rows
string col_size; //mapping index to no.of columns
vector<vector<int> >Arr(row);
for(i=0; i<row ; i++){
cin>>col;
col_size.push_back(col); // no. of columns at ith row
Arr[i]=vector<int>(col);
for(j=0 ; j < col_size[i] ; j++)
cin>>Arr[i][j];
}
//printing the 2D Array
for(i=0; i<row ; i++){
for(j=0 ; j<col_size[i] ;j++){
cout<<Arr[i][j]<<" ";
}
cout<<"n";
}
return 0;
}
相关文章:
- OpenMP阵列性能较差
- 如何将三维尺寸不固定的三维阵列展平为一维阵列
- 当我的阵列太大时出现分段错误
- 位阵列上的快速AND运算
- 阵列必须使用大括号封闭的初始器进行初始化
- 没有从阵列<float>到阵列<int>的可行转换
- C++动态安全 2D 交错阵列
- 将平面阵列重塑为复杂的特征类型
- 如何使用英特尔 PIN 捕获阵列的所有负载?
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 库特<<恩德尔;不适用于打印 2D 阵列
- 数组类 阵列的打印输出
- 从较小的阵列到较大的阵列的元素级转换
- 仅在大型阵列上出现合并排序分段错误
- 从阵列C++中删除重复项
- 阵列的大小在C++中是否灵活?
- 反转阵列中的正序列
- 具有可变尺寸的 C++ 2D 阵列
- 二维阵列的动态分配
- 重新增长阵列时出错:写入时缓冲区溢出