2015-02-21 4 views
-2

Была попытка выяснить, почему я не могу заставить 2d-векторы нормально работать. Пробовал это, и он работает, только если я инициализирую вектор векторов как локальную переменную. В противном случае я получаю ошибку вне диапазона.Вектор вне диапазона инициализация C++

vector <string> allSymbols; 

std::vector<std::vector<bool>> wholeMap(allSymbols.size(), std::vector<bool>(allTerms.size() + 2)); 

void fillWholeMap() 
{ 


    cout << allSymbols.size() << endl; 
    cout << allTerms.size() << endl; 
    for (int i = 0; i < allSymbols.size(); i++) 
    { 
     for (int j = 0; j < allTerms.size() + 2; j++) 
     { 
      wholeMap[i][j]=false; 
     } 
    } 
} 
+0

Я понятия не имею, чего вы ожидаете от своей второй строки кода. Возможно, вы можете описать свою цель более высокого уровня. Вам нужна 2D-матрица булевых флагов? Возможно, используйте существующий матричный класс или сверните свой собственный простой с чистым интерфейсом. – 5gon12eder

+0

Пожалуйста, в целом [mcve] (http://stackoverflow.com/help/mcve). Убедитесь, что вы инициализируете 'wholeMap' ** после ** вы заполнили' allSymbols' и 'allTerms'. Альтернативой является инициализация 'wholeMap' с размером 0 и использование метода' vector :: push_back() 'для динамического добавления. – tofi9

+0

Извините, да, я пытаюсь создать вектор 2d, который является всеми булевыми флагами. У меня возникли проблемы с инициализацией 2d-вектора. Я сначала инициализирую другие два, и я попробовал вектор :: push_back(). Вторая строка кода - это моя попытка создать вектор вектора с внутренними элементами bools. Предполагается, что этот вектор векторов имеет размер I. Тем не менее, я нахожу, что он не оставляет места. – robo

ответ

0

Глобальная переменная инициализируется еще до того, как вызывается main(). Ваш wholeMap инициализируется размером 0 при создании его как глобальной переменной. Это связано с тем, что размер allSymbols равен 0 в то время.

Смежные вопросы