如何在C ++中获取2d动态字符串数组的大小?

时间:2015-08-11 09:48:29

标签: c++ arrays dynamic

我在C ++中有一个动态填充的字符串数组:

string** A;

它的填充方式如下:

A = new string*[size1];

然后:

for (unsigned int i = 0; i < size1; i++)
{
    A[i] = new string[size2];
    for (unsigned int j = 0; j < size2; j++)
    {
        A[i][j] = whatever[j];
    }
}

在其他地方,我想找出尺寸(size1和size2)。 我尝试使用它:

sizeof(A[i]) / sizeof(A[i][0])

但它不起作用。 有什么想法吗?

由于

5 个答案:

答案 0 :(得分:3)

当您通过new T[N]分配内存时,值N不会存储在任何位置。如果您以后需要了解它,则需要在代码中跟踪它。

预先存在的用于分配内存的类也记住了已分配的长度。在您的代码中:

vector<vector<string>> A(size1, vector<string>(size2));
// (code to populate...)

然后您可以访问A.size()获取size1A[0].size()获取size2

如果在编译时已知尺寸,您可以使用array代替vector

答案 1 :(得分:1)

找到二维(更准确地说是一维动态分配的数组)数组的大小非常简单。只需声明它就像

std::vector<std::vector<std::string>> A;

并使用

std::cout << A.size() << std::endl;

至于你的方法,那么你必须在分配数组时将大小存储在一些变量中。

答案 2 :(得分:0)

如果您正在学习C ++,我建议您学习Classes。使用类,您可以封装int变量以及可用于存储数组维度的2D数组。例如:

class 2Darray{
 string **array;
 int rows;
 int cols;
}

然后,您可以通过读取这些成员变量随时获取2Darray对象的尺寸。

vectors将在幕后为您执行此操作,但您有兴趣学习如何执行此操作。

答案 3 :(得分:0)

您不能仅使用指针运算符创建数组。每个数组基本上都是一个分配内存的指针。这就是编译器在创建数组之前需要常量的原因。

基本上; sizeof(A[i])不会给你数组的大小。因为sizeof()函数将返回指向A [i]位置的指针大小。 sizeof(A[i]) / sizeof(A[i][1])可能会给你1,因为你基本上在做sizeof(int)/sizeof(int*)

所以你需要自己存储边界或使用向量。我更喜欢矢量。

答案 4 :(得分:-2)

无法通过指针获取数组维度