Установка размера std::vector

Вопросы по языкам программирования Си и С++.
Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Установка размера std::vector

Сообщение Admiralisimys » 02.06.2011 (Чт) 12:00

Привет всем.
Перейду сразу к коду
Код: Выделить всё
std::vector<std::vector<int>> Allowing;
size_t SquareCountX, SquareCountY;

//...

Allowing.resize(SquareCountX);
for(size_t i = 0; i < SquareCountX; ++i)
{
   Allowing.resize(SquareCountY);   //Но зачем?
   for(size_t j = 0; j < SquareCountY; ++j)
   {
      Allowing[i].push_back(-1);
   }
}

//...

int GetAllowingValue(size_t x, size_t y) { return Allowing[x][y]; }
void SetAllowingValue(size_t x, size_t y, int val) { Allowing[x][y] = val; }


Для меня неясна необходимость в повторном вызове Allowing.resize но уже с SquareCountY. Замечу что в примере SquareCountX, SquareCountY были равными. Если б там было нечто Allowing[i].resize(SquareCountY); вопросов бы не было. Но нет.

Вот как я вижу данный код на Си (c привлечением new/delete с С++, без проверок)
Код: Выделить всё
int **Allowing = new int * [SquareCountX];
for(size_t i = 0; i < SquareCountX; ++i)
   Allowing[i] = new int [SquareCountY];
   for(size_t j = 0; j < SquareCountY; ++j)
      Allowing[i][j] = -1;

//...
   for(size_t i = 0; i < SquareCountX; ++i)
   {
      delete [] Allowing[i];
      Allowing[i] = NULL;
   }
   delete [] Allowing;
   Allowing = NULL;



P.S.
IDE - Visual C++ 2008.

Добавленно:
Похоже ошибка в примере.
Вот правильный пример http://www.codepedia.com/1/Cpp2dVector применения метода resize к "двумерному" вектору.

Вернуться в С/С++

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

    TopList