Я пытаюсь использовать контейнер (std::vector
, std::list
, std::map
и т. Д.) В шаблоне функции, но я получаю сообщение об ошибке: «Не существует подходящего пользовательского преобразования»
Я попытался создать другой шаблон функции, print_container()
с 1 аргументом, и он работает.
#include "stdafx.h"
#include <iostream>
#include <vector>
template<typename T>
using Iterator = typename T::iterator;
template<typename C, typename V>
std::vector<Iterator<C>> find_all(C& container, V value) {
std::vector<Iterator<C>> res;
for (auto p = container.begin(); p != container.end(); ++p)
if ((*p) == value)
res.push_back(p);
return res;
}
int main() {
std::vector<int> vec1 = { 1, 2, 3 };
std::vector<Iterator<int>> res = find_all(vec1, 1); // does not work
return 0;
}
find_all()
должен возвращать std::vector
итераторов только с 1 итератором, итераторприсоединяется к vec1[0]
и присваивает этот вектор res
.