Что за ошибка в следующем коде? - PullRequest
2 голосов
/ 29 марта 2010
#include <iostream>
#include <algorithm>
#include <vector>
#include <boost/array.hpp>
#include <boost/bind.hpp>

int main() {
  boost::array<int, 4> a = {45, 11, 67, 23};
  std::vector<int> v(a.begin(), a.end());
  std::vector<int> v2;
  std::transform(v.begin(), v.end(), v2.begin(), 
    boost::bind(std::multiplies<int>(), _1, 2));
  std::copy(v2.begin(), v2.end(), std::ostream_iterator<int>(std::cout, " "));
}

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

1 Ответ

12 голосов
/ 29 марта 2010

v2 имеет размер ноль при вызове transform. Вам нужно либо изменить размер v2, чтобы в нем было как минимум столько же элементов, сколько v до вызова transform:

v2.resize(v.size());

или вы можете использовать std::back_inserter при вызове transform:

std::transform(v.begin(), v.end(), std::back_inserter(v2), boost::bind(std::multiplies<int>(), _1, 2));
...