2011-12-11 110 views
0

你如何創建一個變量名稱,你創建一個變量,然後在括號中的變量號碼? (順便說一句,我只是猜測出來的代碼應該如何讓你明白我想說的。)例如:如何在不用C++創建數組的情況下創建變量名?

int var[5]; 
//create a variable var[5], but not var[4], var[3], var[2], etc. 

之後,可變數量必須能夠訪問由一個可變的值:

int number = 5; 
int var[number]; //creates a var[5], not a var[4], etc. 
int var[2]; //creates a var[2], not a var[1], etc. 
cout >>var[number]; 
number = 2; 
cin << var[number]; 

如果我的方式偏離我的「示例」,請建議別的。我需要類似這樣的東西來操作我的遊戲,因爲我必須能夠創建子彈的無限實例,但它們也會在一個點上被銷燬。

+1

什麼是使用陣列全天時,你不想要的序列中的其他元素的點? – Mahesh

+1

你想要什麼不清楚。 'int var [5]'不會創建一個「'var [5]'」。 C/C++使用從零開始的索引,因此它只創建一個索引爲0到** 4的5個整數數組。另外,如果你只需要一個整數,那麼不要創建一個數組。 –

+0

我不明白這個問題。爲什麼你只想要數組中的一個元素?爲什麼不只是使用一個變量呢? – Marlon

回答

4

看起來您正在尋找由std::map提供的功能,這是一個用於將鍵映射到值的容器。

Documentation of std::map


實施例使用

在下面的例子中,我們的值123綁定到整數鍵4,並將該值321到鍵8然後,我們使用一個std::map<int,int>::const_iterator迭代通過我們的名爲mstd::map中的鍵/值對。

#include <map> 

    ... 

    std::map<int, int> m; 

    m[4] = 123; 
    m[8] = 321; 

    for (std::map<int, int>::const_iterator cit = m.begin(); cit != m.end(); ++cit) 
    std::cout << cit->first << " -> " << cit->second << std::endl; 

輸出:

4 -> 123 
    8 -> 321 
+0

我試過你的代碼,它的工作!但是,我使用「int」作爲示例,但我打算使用用戶自定義的變量,如類。我將如何使用你的方法來聲明一個類? – Ripspace

+0

@Ripspace如果你想在你的地圖中使用*用戶定義的對象*作爲**鍵**,你將不得不爲該類定義一個'operator <',或者爲'std :: map'提供一個比較器作爲第三個模板參數。 你可以閱讀更多關於它[這個SO問題](http://stackoverflow.com/questions/1102392/stl-maps-with-user-defined-objects) –

+0

我研究了一半小時,無法弄清楚。如果我給了你一個班級「子彈」怎麼辦?你會寫一個例子嗎? – Ripspace

1

它看起來像你想要的變長數組,這不是C++支持的東西。在大多數情況下,正確的解決方案是使用std::vector代替,如

int number = 42; // or whatever 
std::vector<int> var(number); 

您可以使用std::vector,你會在大多數情況下使用數組,你獲得了很多的獎勵功能。

+0

我應該包括什麼標題,因爲我得到有關向量不是「標準的成員」的錯誤。 – Ripspace

+0

@Ripspace'#include ' –

+0

如何在創建它之後使用該變量?我嘗試了var(數字),但它沒有奏效。 – Ripspace

0

如果我理解你想要的東西(我不確定我是這麼做的),你希望能夠創建一個地方來保存對象並根據一些索引號使用它們,但只能創建特定的在需要時進入它的物體。你需要這樣做,因爲1)你不知道要創建多少個對象,或者2)你不會使用每個索引號或3)兩者。

如果(1)那麼你應該使用一個向量,它是一個類似數組的結構,當你向它添加更多東西時它會自動增長。查找std :: vector。 (2)那麼你可以使用一個指針數組,然後初始設置所有的值爲空,然後使用new根據需要創建對象。 (或者你可以使用第3部分推薦的解決方案。)

如果(3)那麼你想使用某種形式的映射或散列表。即使並非所有數字都在使用中,這些結構仍可讓您通過數字查找事物,並可根據需要進行增長。我強烈推薦一個哈希表,但在C++中,STL中沒有一個,所以你必須建立自己的或在第三方庫中找到一個。爲了方便起見,你可以使用std :: map,它是STL的一部分。它的功能基本相同,但速度較慢。一些C++發行版還包含std :: hash_map。如果可用,應該使用它,因爲它會比std :: map更快。

相關問題