итерация по вектору с вызовами push_back - PullRequest
0 голосов
/ 28 мая 2020

Так что мой вопрос немного странный, он относится к модификации вектора при повторении его в for l oop. Пример:

  //Declare
  std::vector<int> a{4,6,1,9} ;
  std::vector<int> b{-1000,-2000,-3000,-4000} ;

  //Allocate sufficient cap 
  a.reserve(100) ;

  // helpers
  int max = 0 ;
  int min ;
  int condition = 1 ; 

  //Loop
  while(condition){
    min = max ;
    max = a.size() ;

    for(int i = min; i < max ; i++){
      for(int j : b){
        a.push_back( a[i] + j ) ;
      }
    }
  //Cut out elements from previous state
  a.erase(a.begin(),a.begin() + max) ;

    //..... operations that might cause condition = 0 
  }

Моя идея состоит в том, чтобы использовать один и тот же вектор для размещения неизвестного количества результатов операций, выполненных над элементами из предыдущего состояния вектора. Здесь мы можем заранее рассчитать, сколько входов будет добавлено, но в моей исходной задаче я не буду знать - т.е. вектор a может иметь любое количество (в пределах емкости) начальных элементов внутри него до начала l oop, и Также может быть условный оператор непосредственно перед a.push_back( a[i] + j ) ;, который может привести к пропуску некоторых операций a.push_back( a[i] + j ) ;. По сути, это своего рода векторизованная рекурсия.

Мой вопрос в том, может ли это привести к неопределенному поведению и перераспределяет ли такая последовательность память, даже если емкости в векторе a должно быть достаточно этапы.

...