2008-11-02 250 views
3

是否有任何方法檢查數組的給定索引是否存在? 我想設置數字索引,但像1,5,6,10。所以我想看看這些指標是否已經存在,如果他們只是增加另一個計數器。檢查數組索引是否存在

我通常使用PHP的工作,但我試圖做這在C++,所以基本上我想詢問是否有與C++來使用isset()函數的方式

PS:這跟載體更容易?如果是這樣,任何人都可以指向我一個很好的矢量教程?謝謝

回答

8

在C++中,數組的大小,當它被宣佈是固定的,而你可以訪問關閉聲明數組大小結束,這是非常危險的,難以跟蹤下來的錯誤的來源:

int i[10]; 
i[10] = 2; // Legal but very dangerous! Writing on memory you don't know about 

它似乎想要類似數組的行爲,但是所有元素填充。傳統上,這是散列表的領域。載體是不是這樣一個很好的解決方案在這裏,你將有空元素佔用空間,更好的是像一張地圖,在那裏如果通過搜索來和解釋結果存在的元素,您可以測試:

#include <map> 
#include <string> 

// Declare the map - integer keys, string values  
std::map<int, std::string> a; 

// Add an item at an arbitrary location 
a[2] = std::string("A string"); 

// Find a key that isn't present 
if(a.find(1) == a.end()) 
{ 
    // This code will be run in this example 
    std::cout << "Not found" << std::endl; 
} 
else 
{ 
    std::cout << "Found" << std::endl; 
} 

提醒一句:使用上面的方法找到,如果一個鍵存在,而不是像測試的默認值

if(a[2] == 0) 
{ 
    a[2] = myValueToPutIn; 
} 

的地圖的行爲是插入上的第一次訪問一個默認的構造的對象那個關鍵的價值,如果目前沒什麼東西的話。

+0

謝謝:)我會在地圖類閱讀並再次嘗試一下 謝謝! – AntonioCS 2008-11-02 15:26:07

3

我的個人投票是使用矢量。他們會動態調整大小,只要你不做一些愚蠢的事情(比如嘗試訪問一個不存在的元素),他們使用起來相當友好。

至於教程,我可以爲您指出的最好的事情是google search

1

這聽起來像是真的地圖最接近你想要的。您可以使用STL(標準模板庫)中的Map類(http://www.cppreference.com/wiki/stl/map/start)。

地圖提供了一個對象的容器,它可以被一個鍵(你的「索引」)引用。

1

要做到這一點沒有向量,你可以簡單地交叉檢查你綁定訪問數組的大小。像:if(index < array_size)它是無效的索引。

如果您不知道大小,可以使用sizeof運算符找到它。

例如:

int arr[] = {5, 6, 7, 8, 9, 10, 1, 2, 3}; 
int arr_size = sizeof(arr)/sizeof(arr[0]);