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,对吗?有什么建议?
- 编辑
好吧,我对矢量的担心是它会在推回时重新分配,你得到了重点,我可以分配内存.但是,我无法改变结构,整个代码是相关的.谢谢你的答案,我看到没有办法,所以生病只是寻找一种方法来存储大小的内存.
我问的问题不是什么样的结构.
简单.
使用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)
| 归档时间: |
|
| 查看次数: |
3667 次 |
| 最近记录: |