манипуляции вектором с ++ - PullRequest
0 голосов
/ 03 июня 2011

Я пытаюсь удалить самый большой элемент int в векторе и вставить его в новый вектор. У меня уже есть int, представляющий наибольшее число в векторе, и один, представляющий позицию этого числа.

Вот мой код:

vector2.push_back(highest);
vector1[highestpos] = vector1[vector1.size()-1];
vector1[vector1.size()-1] = highest;
vector1.pop_back();

Но он возвращает ошибку.Что-то не так с этим кодом?

РЕДАКТИРОВАТЬ :::::: ЗДЕСЬ БОЛЬШЕ МОЕГО КОДА.Ошибка, которую я получаю, является ошибкой утверждения, которая говорит, что векторный индекс находится вне диапазона.

while(vector1.size() > 0)
{
highest = 0;

   for (int i = 0; i < vector1.size(); i++)
  {

      if (vector1[i] > highest)
       {
           highest = vector1[i];
           int highestpos = i;
       }
  }

      vector2.push_back(highest);
      vector1[highestpos] = vector1[vector1.size()-1];
      vector1[vector1.size()-1] = highest;
      vector1.pop_back();
}

Ответы [ 2 ]

2 голосов
/ 03 июня 2011
 int highestpos = i;

Вы просто определяете переменную внутри цикла.Это не меняет значение переменной вне цикла.Изменить на:

 highestpos = i;
2 голосов
/ 03 июня 2011

Основываясь на редактировании, проблема в том, что highestpos внутри цикла, которому присвоено значение i, не совпадает с highestpos вне цикла.

Попробуйте std::cout << highestpos << '\n'; прямо перед vector1[highestpos] = ...

(также может быть полезно использовать max_element() вместо рукописного цикла для определения наибольшего значения и vector1.erase() для удаления из вектора, хотя удаление действительно может быть менее эффективным, чем swap + pop_back)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...