2011-09-02 67 views
2

我是編程新手,我想知道如何獲取數組的大小,即獲取數組內部元素的大小。例如,如果我聲明一個大小爲10的數組,但只向數組中輸入3個元素,我將如何確定這個數組的大小?如果我不知道最初放置了多少元素。C++獲取數組的大小

+1

@Phonon:不,甚至Java都不會跟蹤你在一個數組中填充了多少元素。 –

+0

您似乎不僅在C++中缺乏大量的基礎知識,而且在編程方面也一般。沒關係。我建議你應該閱讀[一本好的C++書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list) –

+0

@R。你是對的,我誤解了這個問題。 – Phonon

回答

7

如果您聲明一個數組,例如int array[10],那麼它的大小總是10 * sizeof(int)。無法知道您訪問過多少次;你需要手動跟蹤。

您應該考慮使用容器類,例如std::vector

std::vector<int> vec; 

vec.push_back(5); 
vec.push_back(10); 
vec.push_back(42); 

std::cout << vec.size() << "\n"; // Prints "3" 
-1

你保持當你受到1. 每當你從數組刪除添加到陣列增加計數初始化爲0

反變盤點由1

遞減計數

anytime count會給你數組的大小。

+0

爲什麼選擇爲答案投票。請幫我理解。 – MduSenthil

-1

建議:

int[10] arr; 

//init all to null 

for (int i =0; i < 10; i++) 
    arr[i] = 0; 

arr[0]=1; 
arr[2]=5; 

int sz = 0; 

for (int j = 0; j < 10; j++) 
    if (arr[j] != 0) sz++; 
+0

爲什麼downvote?從技術上說我沒有做任何不正確的事情。 –

+0

我沒有downvote,但所有這些代碼確實是計數非零元素的數量。 –

1

如果聲明10個元件的舊式陣列,例如std::string words[10],數組的大小總是10個字符串。即使採用新款式(std::array),它也是一個固定大小。

您可能正在尋找一個std::vector<>。這沒有固定的大小,但確實有.size()方法。因此,如果向它添加三個元素,假設您不知道它,將會有.size()==3

1

獲取數組大小(以元素數量爲單位) 使用sizeof(a)/ sizeof(a [0] )

請參閱下面的示例程序。我用C但它應該繼續到C++就好了

#include <stdio.h> 

int main(){ 
    int a[10]; 
    printf("%d elements\n",sizeof(a)/sizeof(a[0])); 
    return 0; 
} 

//output: 10 elements 
+0

確實。但這不是OP要求的。 –

0

有幾種可能的方法,但它們取決於您的定義。

如果您知道用戶不會輸入值(也稱爲哨兵值),則可以使用像memset這樣的函數將整個數組設置爲該未使用的值。然後,您將遍歷列表中所有列表中不匹配該值的變量。

另一種方法是構建自己的數組類,該數組只在數組被修改時計數(您必須根據需要重載=和[]函數)。

您也可以建立一個動態鏈接列表,所以當用戶添加變量時,可以通過遍歷列表或計數來確定計數。但是,如果你將數組作爲基本數組,並不知道它是否是實際的起始狀態,也不知道用戶期望什麼(因爲這是你的程序,這不應該發生) ,那麼一般來說,不,有已知的方法可以知道這一點。