gpt4 book ai didi

具有可变大小行的 C++ 二维数组

转载 作者:IT老高 更新时间:2023-10-28 23:12:44 26 4
gpt4 key购买 nike

如何创建一个 2D 数组,比如 arr[][] 有 5 行,每行有可变数量的列?

可能arr[5][]第一行 arr[0][] 4 列

第二行 arr[1][] 有 5 列等等?

我不介意 STL vector 解决方案,但我还不太了解 vector 。

最佳答案

使用 C++11,您可以使用 vector 轻松完成此操作(添加换行符以提高可读性):

std::vector< std::vector <int > > arr = {
{1,2,3},
{4,5},
{6,7,8,9,0}
};

如果您没有 C++11 编译器,它的工作方式完全相同,但您将无法轻松初始化它们。您可以单独设置元素:

std::vector< std::vector <int > > arr;//vector of vectors. Think of each element as of a "row"
std::vector<int> sub;//a temporary "row"
sub.push_back(1);
sub.push_back(2);
arr.push_back(sub);//Adding a "row" to the vector
sub.clear();//Making another one
sub.push_back(1);
sub.push_back(12);
sub.push_back(54);
arr.push_back(sub);//Adding another "row" to the vector

或者你可以用一个普通的数组来初始化每个“行”:

std::vector< std::vector <int > > arr;
static const int arr[] = {1,2,3,4};//A "row" as an ordinary array
vector<int> vec (arr, arr + sizeof(arr) / sizeof(arr[0]) ); //Setting a "Row" as a vector
arr.push_back(vec);//Adding the "row" to the vector of vectors.

用普通数组做你想做的事是不可能的,因为当你创建一个 array[X][Y] 时,它自动是一个 X*Y矩阵。但是,您可以使用指针数组:

int * array[3];
//also possible: int ** array = new int*[3]; but don't forget to delete it afterwards.
int sub1[3] = {1,2,3};
int sub2[2] = {1,2};
int sub3[4] = {1,2,3,4};
array[0] = sub1;
array[1] = sub2;
array[2] = sub3;

并使用 array[X][Y] 访问元素。但是, vector 解决方案总体上要好得多。

关于具有可变大小行的 C++ 二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535384/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com