2016-10-16 2 views
-3

Допустим, вы имеете следующий вектор Int'S:Векторная итерация с несколькими условиями?

std::vector<int> V={5,4,3,2,1,6,7,8}; 

Мне нужно написать определенную форму итерации, которая будет толкать все уменьшающиеся Int в отдельный вектор , а также первое увеличение Int.

Таким образом, для V, я требую {5,4,3,2,1,6}

Моя первая мысль была использовать для цикла:

std::vector<int> Results; 

for(int i=V.size(); i--;) 
{ 
    if(V[i]>V[i+1]){Results.push_back(V[i]);}; 
} 

Однако его в данный момент Я застрял, как я могу также отбросить первый увеличивающий элемент (в данном случае 6)?

+0

Почему бы не скопировать все уменьшающееся, а затем еще одно после цикла? Кроме того, ваш текущий цикл не имеет смысла. – krzaq

+0

Если у вас есть особые случаи ребер, отправьте их в OP – StoryTeller

ответ

1

Необходимо изменить структуру своего кода. Например: перерыв при достижении условия остановки.

std::vector<int> results; 

for(int i = 0; i < v.size() - 1; ++i) 
{ 
    results.push_back(v[i]); 

    if(v[i] < v[i+1]) 
    { 
    results.push_back(v[i+1]); 
    break; 
    } 
} 
+0

Каждый раз, когда переменная цикла должна быть извлечена из цикла в подобных примерах, я еще раз понимаю, почему python добавил в конструкции цикла предложение 'else'. – StoryTeller

+0

Это не дает адекватного ответа. Что такое вектор начинается с первого индекса ниже второго? Цикл останавливается и не прогрессирует. –

+0

@BabraCunningham, вы действительно проверяли это, прежде чем делать это утверждение? Кроме того, описание вашей проблемы и пример не показывают, что она должна быть * – StoryTeller

0
bool decrease = false; 
    for(i = 0; i < v.size() - 1; ++i) 
    { 
     if(V[i] > V[i+1]) { 
      decrease = true; 
      results.push_back(v[i]); 
     } else if(decrease == true) { 
      break; 
     } 

    } 

Вы можете добавить флаг, чтобы представить, если уменьшение последовательности начала.

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