zoukankan      html  css  js  c++  java
  • c++中计算数组的长度。以及c++中向量的长度的计算的方式。

    在这里我想要先说一下vector和数组的关系。

    自从有了vector人们就非常的喜欢使用向量,而不再怎么使用数组了。vector的使用原理:vector的基层是由数组构建成的。vector初始时会申请某一确定的空间,当元素已经存放满且仍需要添加元素的时候,vector会重新进行申请2倍于现在空间的空间,并把数据复制到新的空间,并释放当前空间。显而易见,这样的空间复杂度是O(n)的,与每次多申请某一特定的空间相比还是比较高效的技巧。vector本身并不是c++的一部分,是属于c++标准库提供的功能,是一群大佬写出来的给c++菜鸟们使用的东东。怎么样进行计算vector的长度呢?

    首先定义一个向量vector<int>a,然后如果想要知道这个向量中有多少个元素,我们只需要进行调用a.size()方法就可以了。

    这里开始说数组的长度

    几种重要的方法对向量中的元素进行操作:

    1.sort(a.begin(),a.end());//对a中的从a.gegin()到a.end()的元素大小进行排序

    2.reverse(a.begin(),a.end());//对a中的元素倒置。但是不排列。如a元素为1,2,3,4倒置后为4,3,2,1

    3.copy(a.begin(),a.end(),b.begin()+1);//把a中的从a.begin()到a.end()的元素复制到b中,从b.begin()+1的位置开始复制,覆盖掉原有的元素。

    4.find(a.begin(),a.end(),10);//在a中的从a.begin()到a.end()的元素中查找10,若存在返回其在向量中的位置。

    关于数组的长度,这里小编给大家准备了两个网站,大家可以围观一下。

    第一个网站是不可以以实参的形式进行传递。但是第二个网站可以用实参的形式进行传递。

    第一个网站:https://blog.csdn.net/i_pangpang/article/details/80197865

    下面我将第一个网址的内容进行罗列出来,供大家参考:

    (1)借助sizeof()函数 :

    #include<stdio.h>
    int main()
    {
    	// 定义一个整型数组, 并进行初始化赋值9个数据 : 
    	int arr[] = {1,2,3,4,5,6,7,8,9};
    	int length = 0;
    	// 计算数组中数据长度 :
    	// 所有数据的字节数除以一个数据的字节数即为数据的个数 : 
    	length = sizeof(arr) / sizeof(int); 
    	
    	printf("数组的长度为: %d
    ",length);
    	
    	return 0;
    } 

    执行结果 :

    (2)上面的方法会出现一个误区

    那就是当数组作为实参传递到另一个函数时, 而这个函数执行了上面同样的方法, 结果出来的不会正确的数组的长度 :

    测试代码 :

    #include<stdio.h>
    
    void test(int arr[])
    {
    	int length = 0;
    	length = sizeof(arr) / sizeof(int);
    	printf("test_数组的总字节数为: %d
    ",sizeof(arr));
    	printf("test_数组的长度为: %d
    ",length);
    }
    
    int main()
    {
    	// 定义一个整型数组, 并进行初始化赋值9个数据 : 
    	int arr[] = {1,2,3,4,5,6,7,8,9};
    	int length = 0;
    	// 计算数组中数据长度 :
    	// 所有数据的字节数除以一个数据的字节数即为数据的个数 : 
    	length = sizeof(arr) / sizeof(int); 
    	printf("main_数组的长度为: %d
    ",length);
    	
    	test(arr);
    	
    	return 0;
    } 

    执行结果 :

    代码分析 :

    当将数组作为实参传递到另一个函数中时, 另一个函数的形参相当于一个指针变量, 因为将数组的名作为实参时, 就是将数字的首地址作为实参, 所以在test函数中输出的sizeof(arr)其实得到的是一个整型数组的长度(所占的字节数), 所以结果是8, 再用其除以int所占的字节数(4), 结果就是2 .

    (这样是得不到准确的数组的长度的, 建议的操作是在定义数组的函数中计算数组的长度, 在以实参的形式传递出去, 这样其他的函数变可以获得数组的长度) 
    ————————————————
    版权声明:本文为CSDN博主「i.czy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/i_pangpang/article/details/80197865

    第二个网站:https://blog.csdn.net/hengbao4/article/details/53224080

    #include<iostream>
    using namespace std;
    
    template<typename T>
    int count(T& x)
    {
        int s1 = sizeof(x);
        int s2 = sizeof(x[0]);
        int result = s1 / s2;
        return result;
    }
    int main()
    {
        int a[] = { 1,2,3 };
        double b[] = { 2.2,3.4 };
        cout<<count(a);
        cout << count(b);
        system("pause");
        return 0;
    }

    在这里我建议你可以在创建爱你数组的时候就直接进行统计出来数组的大小。

  • 相关阅读:
    Unity3d之UGUI- Image拦截Button响应事件
    hdu1114Piggy-Bank(完全背包)
    cf455A boredom
    hdu2084数塔(入门级dp)
    小米线刷出现remote: partition table doesn't exist
    km算法
    hdu1069 Girls and Boys
    CF1203C Common Divisors
    魔法部落
    java命令行运行出现找不到或无法加载类
  • 原文地址:https://www.cnblogs.com/littleswan/p/11306073.html
Copyright © 2011-2022 走看看