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\n",length);
	
	return 0;
} 

執行結果 :

(2)上面的方法會出現一個誤區

那就是當數組作為實參傳遞到另一個函數時, 而這個函數執行了上面同樣的方法, 結果出來的不會正確的數組的長度 :

測試代碼 :

#include<stdio.h>

void test(int arr[])
{
	int length = 0;
	length = sizeof(arr) / sizeof(int);
	printf("test_數組的總字節數為: %d\n",sizeof(arr));
	printf("test_數組的長度為: %d\n",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\n",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;
}

在這里我建議你可以在創建愛你數組的時候就直接進行統計出來數組的大小。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM