2016-10-18 4 views
1

Я построить функцию, которая принимает ссылку на вектор в качестве аргумента, это выглядит следующим образом:Передача вектора в качестве ссылки на рекурсивную функцию

void func(std::vector<int> &vec) { 
    // sth. to do 
} 

Но я хочу, что функция является рекурсивной и называет себя частью исходного вектора.

void func(std::vector<int> &vec) { 
    // sth. to do 
    func(part of the orignial vector); 
} 

Как я могу построить новый вектор из моего первоначального вектора? Важно, что когда я изменяю часть вектора в рекурсивном вызове, этот исходный вектор «vec» также изменяется, поэтому я не хотел передавать копию или новый вектор. Спасибо за помощь.

+9

Пройдите пару итераторов. Так действуют все [стандартные алгоритмы] (http://en.cppreference.com/w/cpp/algorithm). Тогда легко передать любой поддиапазон исходного диапазона ввода. – BoBTFish

+0

Или «старый путь», вы можете передавать начальные и конечные индексы вместе с массивом. –

+1

или с [range-v3] (https://ericniebler.github.io/range-v3/), передайте * диапазон * вместо вектора – Jarod42

ответ

2

Старый способ!

void func(std::vector<int> &vec,int l,int r) { 
    // this function modifies only vec fro indices l to r. 
    // 
    // do what you want 
    // 
    // 
    func(vec,new_l,new_r); 
} 
+1

Рассмотрите возможность использования 'size_t' для индексов, иначе код может иметь использовать, если размер вектора может превышать «INT_MAX». На самом деле одной из основных причин, почему нужно использовать 'vector :: iterator', является то, чтобы полностью исключить эту проблему –

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