Я хотел бы передать произвольный контейнер в качестве аргумента функции и выполнить итерацию по нему (без стирания или выталкивания элементов).
Передача итераторов. Вот пример для реализации и использования:
template <typename Iter>
void function(Iter begin, Iter end)
{
for (Iter it = begin; it != end; ++it)
{
std::cout << *it << std::endl;
}
}
int main()
{
std::string array[] = {"hello", "array", "world"};
function(array, array + 3);
std::vector<std::string> vec = {"hello", "vector", "world"};
function(vec.begin(), vec.end());
}
Обратите внимание, что во многих случаях вам на самом деле не нужно писать функцию, но вы можете создать ее, используя вместо этого библиотечные средства, а затем просто применить std::for_each
к ней. Или, что еще лучше, используйте существующий алгоритм, такой как std::accumulate
или std::find_if
.