请区分c++编程时用到的单词length和size

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请区分c++编程时用到的单词length和size相关的知识,希望对你有一定的参考价值。

我理解的是:
size:用字节数表示的大小,如sizeof
length:数组中数据的数目,如int aSomeInt[3] = 0, 0, 0的length是3,又如某个函数的原型func(int *pInfo, unsigned len)其中的len表示数组中含有多少int(显然这里不关心数组占的字节数)
但是!!!std::vector::size()返回的是数组中的数据数目,而不是vector的数据域占的字节数。这个size和sizeof中的size意思不同。
所以我很困惑,length和size两个词到底怎样区分?

另外,懂openGL的请看:
指定顶点数组的函数glVertexPointer(GLint size, ……)其中size又代表“多少个数据表示一个点”(如:如果使用三维坐标,size就是3)。这个size与上述的size意思又都不一样……

谁来帮我区别一下这两个词啊!我真心不想钻牛角尖,但是最近我快被这两个词弄晕了。我自己都难以统一命名规范,结果一个词在不同地方意思不一样,把自己绕进去了……
我不仅想知道STL中怎样用这两个词,还想了解其他情境下按什么规则使用它们。(比如给标识符命名时,什么情况下使用哪个词)

这两个词意义相近,一般根据具体情况而定。比如:char str[20]; size就是20,因未初始化,length未知(有些系统全部初始化为0此时length是0). 但是:
strcpy(str,"abcd")后,这时str的size仍是20,但字符串长度length为4.
当一种易产生歧义时,使用另一个,你所说的 vector::size()为什么不用length呢? 因向量的长度表示 sqrt( x1^2+...+xn^2),易混;这里用size表向量的维数。
参考技术A int
*n
=
new
int(10);
//初始化行数计数器
改成int
*n
=
new
int[10];
//初始化行数计数器
用小括号的意思是申请一个,赋值为10,中括号才是申请10个
参考技术B 标准库的string类型的length()成员函数和size()成员函数返回相同的东西:字符串中字符的数量追问

其他情境下呢……如果我要命名一个标识符,什么情况下该用哪个词?

追答

std::vector::reserve()的作用是A directive that informs a vector of a planned change in 【size】它在出错时会抛出std::length_error……

再如C++标准对于operator new的描述有这么一句:
The allocation function attempts to allocate the requested amount of storage. If it is successful, it shall return the address of the start of a block of storage whose 【length】 in bytes shall be at least as large as the requested 【size】.

= =好吧我试图证明二者意思一样……

追问

能不能硬说出点区别……这样一来我更不知道用length还是szie来命名了

参考技术C 所以说和用词没有关系,主要还是需要看API
API说这个size指代什么就是什么,不要去按照自己的猜想去使用追问

我在编写一个API……可我不知道怎样用这两个词。我几个月前对size和length的理解和现在的理解竟然不一样,这就是因为我一直也没弄明白他俩怎么用

换句话说,我必须区分这两个词,可是没有参考依据,因为别人的API里面同一个词意思不一样。你能帮我看看该怎么用吗?

追答

如果是数组类型的,比如容器,size一般就是指容器里面元素个数
如果是数据类型,size可以指代数据占用内存大小(和sizeof类似)

本回答被提问者采纳

java中的size,length,length()的区别

java中的size,length,length()的区别

一、size()

java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性

二、length()

java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法

三、length

java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!

四、例子

public class TEST {
    public static void main(String[] args) {
        String[] strs={"北京","上海","田径"};
        System.out.println(strs.length);
        String str="XXX,您好!";
        System.out.println(str.length());
        List<Integer> inn=new ArrayList<Integer>();
        inn.add(10);
        inn.add(11);
        System.out.println(inn.size());
    }
}

输出结果:

技术分享图片

以上是关于请区分c++编程时用到的单词length和size的主要内容,如果未能解决你的问题,请参考以下文章

华为机试真题 C++ 实现英文输入法

编程时请选择正确的输入法,严格区分中英文

leetcode 58. 最后一个单词的长度(Length of Last Word)

接受所有数据类型的不区分大小写的 C++ 排序?

求C++编程题目【菜单】计算机菜单中有N个操作,而每个操作都会用一个或更多的单词来描述。

C++数据类型问题,wchar_t和char;size_t