2013-05-21 72 views
7

我想循環遍歷一個最大值爲1000的數組。我使用文本文件中的值填充數組。我試圖循環訪問該數組,但在for循環中,我不知道數組的長度,所以我不知道要在for循環語句的第二部分中放置什麼。例如:我有一個名爲int scores[1000];的數組,我試圖遍歷這個數組並將分數放在一個等級類別中。所以A = 90-100,B = 80-89,C = 70-79,D = 60-69,F = 0-59。在C++中循環遍歷一個數組

所以我不知道我的for循環會是什麼樣子:

for(int i = 0; i < ...; i++){ 

if(scores[i] > = 90 || scores[i] <= 100){ 

//Do stuff... 

} 

我想我也困惑,如何在最後得到每個類別的總計數過。但大多數情況下,它是如何迭代這個數組的。我知道sizeof(分數[])不會工作,因爲這會給我的int大小,而不是數組本身的長度。儘管提前謝謝!

回答

6

如果您改爲使用std::vectorlink),則可以添加元素並使矢量動態更改大小。使用size()方法可以輕鬆查詢該大小。如果你使用這樣的數組,你必須自己跟蹤其中元素的數量。

如果你有一個向量的元素FILLES你的循環可能看起來像這樣:

std::vector<int> scores; 
// fill vector 

for (unsigned int i=0; i<scores.size(); i++) { 
    // use value 
} 

如果你有使用數組,實際上有一個scoreCount變量,擺在那裏實值的數量,只需使用在你的循環:

for (int i=0; i<scoreCount; i++) { 
    // use value 
} 

第三種選擇,正如我在評論中提到,將與初始化,你從來沒有使用值整個數組(通常爲-1),然後使用它作爲一個標記填充vs空陣列位置如下所示:

for (int i=0; i<1000; i++) { 
    scores[i] = -1; 
} 

// add real values to scores 

int i=0; 
while (scores[i] != -1 && i < 1000) { 
    // use value 
    i++; 
} 
+0

不幸的是,我必須堅持使用數組,我已經熟悉了載體和會輕鬆地選擇他們,因爲他們是多麼靈活,但作爲一個挑戰,我做這個陣列。 – user12074577

+0

好的,那麼你只需要保留一個計數器,你可以在數組中放置多少個值。另一個(可能更糟糕的)想法是將所有1000個值初始化爲您從未使用過的某個值(可能是-1),然後再循環,直到您碰到其中一個-1。我會保留一個櫃檯。 –

+0

我確實有一個名爲scoreCount的計數器,可以這樣做,請問我可以使用一個我的循環看起來像什麼的例子來展示我? – user12074577

2

當填充scores陣列,實際上你需要計算你把多少項目在裏面。然後你記得那個數字,稍後再用它進行迭代。例如,你可能已經讀過你的分數是這樣的:

// Read some scores: Stop when -1 is entered, an error occurs, or 1000 values are read. 
int num_scores = 0; 

for(; num_scores < 1000; num_scores++) 
{ 
    if(!(cin >> scores[num_scores]) || scores[num_scores] == -1) break; 
} 

// Do stuff with scores... 
for(int i = 0; i < num_scores; i++) { 
    ... 
} 

還有一些其他的選擇可以考慮:

  • 使用標記值來表示數據,如分數的結束 - 1。
  • 改爲使用std::vector

順便說一句,您的循環內的邏輯語句將始終爲真。你確定你不是故意使用&&而不是||

+0

是的,我想要或沒有,因爲如果得分介於90和100之間,那麼它是A,我想把它放在A計數器中。所以在迭代數組結束時,Ill有一個A的B,C的等數。 – user12074577

+0

@ user12074577這意味着你想要一個'和'。 50是高於90 *還是低於100? –

7

其實sizeof()應該做這樣的:

sizeof(scores)/sizeof(scores[0])

而且這會給你該數組的元素總人數。

2

如果你真的想用一個容器具有固定大小,使用std::array現代C++而不是C-陣列:

#include <array> 

std::array<std::int32_t, 1000> scores; 

for (std::size_t i{0}; i < scores.size(); ++i) { 
    // Do stuff... 
} 

否則使用std::vector

#include <vector> 

std::vector<std::int32_t> scores; 

for (std::size_t i{0}; i < scores.size(); ++i) { 
    // Do stuff... 
} 

如果您能夠使用C++ 11我也推薦使用固定寬度的整數類型。