我在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])
但它不起作用。 有什么想法吗?
由于
答案 0 :(得分:3)
当您通过new T[N]
分配内存时,值N
不会存储在任何位置。如果您以后需要了解它,则需要在代码中跟踪它。
预先存在的用于分配内存的类也记住了已分配的长度。在您的代码中:
vector<vector<string>> A(size1, vector<string>(size2));
// (code to populate...)
然后您可以访问A.size()
获取size1
,A[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)
无法通过指针获取数组维度