Использовать итераторы.
std::vector<int> lines;
// fill
std::size_t const half_size = lines.size() / 2;
std::vector<int> split_lo(lines.begin(), lines.begin() + half_size);
std::vector<int> split_hi(lines.begin() + half_size, lines.end());
Поскольку диапазоны итераторов представляют полуоткрытые диапазоны [begin, end)
, вам не нужно добавлять 1 во второй начальный итератор: lines.begin() + half_size
не копируется в первый вектор.
Обратите внимание, что такие вещи, как
int split = lines.size() / 2;
int arrayA[split];
int arrayB[split];
не являются стандартными C ++ (и, как таковые, не переносимы). Это так называемые массивы переменной длины (VLA для краткости), и это вещь C99. Некоторые компиляторы имеют их как расширение при компиляции кода C ++ (GCC, Clang). Всегда компилируйте с -pedantic
, чтобы получить предупреждение. Эти VLA действуют непривычно для не POD-типов и, как правило, бесполезны, поскольку вы даже не можете их вернуть.