2011-11-04 77 views
0

我使用字符矩陣通過以下方式定義字符向量向量。向量中擴展向量

std::vector<std::vector <char> > CharMap; 
std::vector <char> temp(sizeY, '.'); 
std::vector <std::vector <char> > temp2(sizeX, temp); 
CharMap = temp2; 

這一直工作正常,到目前爲止,但現在我需要在運行過程中擴大最裏面的載體和事情錯了。

cout << (int) CharMap[0].size(); 
CharMap[0].push_back('.'); 
cout << (int) CharMap[0].size(); 

CharMap[0]char個矢量。此代碼編譯沒有問題。運行時,矢量的大小不會改變。我在這裏試圖做的是將尺寸增加1,但輸出在cout s上都是相同的。爲什麼尺寸不會增加?

在實際代碼中,我將增加所有CharMap[i]的大小,迭代i。但現在,即使這個簡化的版本不起作用。

+0

發佈真實代碼。錯誤可能在其他地方。另外,不要無緣無故地將變體添加到'int'。使用'valgrind'來檢查出界錯誤。 –

+0

'temp2'是不必要的。在'temp'後面用正確的參數創建'CharMap'。 –

+0

通過valgrind運行你的程序,你會看到問題。 –

回答

1

簡單的測試程序似乎按預期方式工作:

#include <vector> 
#include <iostream> 

int main() { 

    std::vector<char> temp(17, '.'); 
    std::vector<std::vector<char> > map(10, temp); 

    for (int i=0; i<map.size(); i++) { 
     std::cout << "Before addition, size = " << map[i].size(); 
     map[i].push_back('.'); 
     std::cout << ", after addition, size = " << map[i].size() << "\n"; 
    } 
    return 0; 
} 

我想你可以嘗試一下,看看它與你的編譯器生成 - 這是幾乎沒有可能不會,在這種情況下你顯然發現了一個錯誤。如果它確實有效,那麼問題顯然是在你沒有向我們顯示的代碼中。

+0

感謝您的反饋。在代碼的其餘部分找到這個錯誤將需要相當多的工作。在深入研究之前,我想確保我沒有做一些愚蠢的事情。 – Malabarba