2016-06-05 3 views
1

Ive пытался с Назначают FXN, но он не работаетКак разделить вектор в C++

c.assign(v.begin(), v.begin() + (v.size() + 1)/2) 
d.assign(v.begin() + (v.size() + 1)/2 + 1, v.end()) 

для например VEC = 1,2,3,4,5,6,7,8 , то он производит результат vec1 = 1,2,3,4 vec2 = 6,7,8

+0

Так есть ошибка в вычислениях. Чтобы понять и исправить это, ответьте на эти простые вопросы: сколько элементов находится в 'c.assign (v.begin(), v.begin() + 3)'? Какие эти элементы? Как вы попадаете в первый элемент, который не назначен? –

ответ

1

Да, результат точно такой, как ожидалось. Помните, пару итераторов, которые Вы подарите assign является полуоткрытый интервал - т.е .:

c.assign(b,e); 

присваивает c значения, соответствующие b через e-1. Но вы добавили 1 к итератору в заявлении d.assign.

Для вашего кода, чтобы работать, как вы собираетесь, вы хотите:

auto const b = v.cbegin(); 
auto const m = b+(v.size()+1)/2; 
auto const e = v.cend(); 

c.assign(b,m); 
d.assign(m,e);