指向数组的指针获得大小为C++的指针

Ben*_*Ben 0 c++ arrays int pointers

int * a;
a = new int[10];
cout << sizeof(a)/sizeof(int);
Run Code Online (Sandbox Code Playgroud)

如果我使用普通数组答案是10,唉,打印的幸运数字是1,因为sizeof(int)是4而iszeof(*int)也是4.我怎么能这个?在我看来,保持内存大小是一个复杂的选择.如何使用代码获得大小?

我最好的猜测是迭代一个数组并搜索它的结束,结束是0,对吗?有什么建议?

- 编辑

好吧,我对矢量的担心是它会在推回时重新分配,你得到了重点,我可以分配内存.但是,我无法改变结构,整个代码是相关的.谢谢你的答案,我看到没有办法,所以生病只是寻找一种方法来存储大小的内存.

我问的问题不是什么样的结构.

Naw*_*waz 7

简单.

使用std::vector<int>Or std::array<int, N>(其中N是编译时常量).

如果你在编译时知道你的数组的大小,并且它不需要在运行时增长,那么使用std::array.其他用途std::vector.

这些被称为序列容器类,它定义了一个成员函数size(),该函数返回容器中元素的数量.只要您需要知道尺寸,就可以使用它.:-)

阅读文档:

当您使用时std::vector,reserve()如果您对容器要容纳的元素数量有一些模糊的概念,则应考虑使用.这将为您带来性能优势.

如果您担心std::vectorvs 原始数组的性能,请在此处阅读接受的答案:

它解释了为什么问题中的代码很慢,与自身无关std::vector,而不是错误的用法.


如果你不能使用其中任何一个,并被迫使用int*,那么我会建议这两个选择.选择适合您需要的东西.

struct array
{
      int *elements;  //elements
      size_t size;    //number of elements
};
Run Code Online (Sandbox Code Playgroud)

这是不言自明的.

第二个是:为另外一个元素分配内存并将大小存储在第一个元素中:

int N = howManyElements();
int *array = int new[N+1];  //allocate memory for size storage also!
array[0] = N; //store N in the first element!

//your code : iterate i=1 to i<=N 

//must delete it once done
delete []array;
Run Code Online (Sandbox Code Playgroud)

  • @BenediktasRimantasJacikeviiu:如果在构造函数中设置所需的大小,则使用`:: std :: vector`基本上没有性能损失. (2认同)