C++语言,数组用什么函数,计算数组长度?

C加伽 2014-04-29 11:12:45
《C++Primer》第四版
第4章 数组和指针

与vector类型相比,数组的显著缺陷在于:数组的长度是固定的,而且程序员无法知道一个给定数组的长度。数组没有获取其容量大小的size操作。

----------
问题:
1.这句话是什么意思?
C++语言,不能使用函数:size(),来计算数组长度么?
...全文
12086 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiukaijia 2014-04-30
  • 打赏
  • 举报
回复
引用 5 楼 NineTyNine_LP 的回复:
可以通过以下方式获取数据的大小:

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
     
int *pbeg = begin(arr);
int *pend = end(arr);
     
auto diff = pend - pbeg;
引用 7 楼 liuyi820729 的回复:
int iArray[100]; int = sizeof(iArray) / sizeof(int);
这两楼是正解
-LanPei- 2014-04-29
  • 打赏
  • 举报
回复
可以通过以下方式获取数据的大小:

int arr[10] = {1,2,3,4,5,6,7,8,9,0};
     
int *pbeg = begin(arr);
int *pend = end(arr);
     
auto diff = pend - pbeg;
highnewrain 2014-04-29
  • 打赏
  • 举报
回复
意思是无论通过静态声明还是动态声请的数组,在确定一个数组能容纳的元素个数后,数组的大小就不能改变了 例:

int iArray[100];
int *piArray;
piArray=new int[100];
上面确定iArray和piArray的元素个数为100后,就不能再改变了,而且数组本身没有函数来获取其所容纳的元素个数,而vector的大小是动态了。 至于说“程序员无法确定一个给定数组的长度”这句话,可以通过下面两个输出函数说明; 如果你想输出一个数组中的全部元素,那么你还得传递一个数组的参数来说明数组的元素个数,而vector就不需要了
void PrintArray(int a[],int iSize)
{
	for(int i=0;i<iSize;++i)
	{
		cout<<a[i]<<ends;
	}
	cout<<endl;
}

void PrintVector(vector<int> a)
{
	for(int i=0;i<a.size();++i)
	{
		cout<<a[i]<<ends;
	}
	cout<<endl;
}
  • 打赏
  • 举报
回复
引用 2 楼 linlinxi007 的回复:
用sizeof是算不出数组大小的。只是指针大小。 所以推荐用vector
sizeof可以算出栈区的数组大小,但不能算出堆区的数组大小。注意必须是数组名,不能是指针,这个时候是可以算出来的。
linlinxi007 2014-04-29
  • 打赏
  • 举报
回复
用sizeof是算不出数组大小的。只是指针大小。 所以推荐用vector
qiminixi 2014-04-29
  • 打赏
  • 举报
回复
他应该是说,数组通常用一个指向第一个元素的指针来标识的,除非直接给的数组元素的个数或者大小,光有一个指针不知道数组的大小。 比如int array[100]; int *pArray=array;//pArray指向数组array sizeof(pArray)是指针的大小,不是数组的大小。
赵4老师 2014-04-29
  • 打赏
  • 举报
回复
realloc函数是干啥吃的捏?
l_journey_91 2014-04-29
  • 打赏
  • 举报
回复
数组的长度无法通过运算符sizeof()获得, vector可以通过size()函数获得元素的个数. 给你个例子体会一下: int iTem[100] = {0}; for(int i= 0; i<100; ++i) { std::cout<<iTem[i]<<","; } //当你不知道iTem的长度是100时,你就无法遍历iTem; std::vector<int> vTem(0,100); for(int i = 0; i < vTem.size(); ++i) { std::cout<<VTem[i]<<","; } //vTem的长度可以通过函数size()获得
低调的狮子 2014-04-29
  • 打赏
  • 举报
回复
int iArray[100]; int = sizeof(iArray) / sizeof(int);
li4c 2014-04-29
  • 打赏
  • 举报
回复
学习了,我还不知道啊

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧