Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / аналог back_inserter, только чтобы передавал ссылку, а не сам элемент / 3 сообщений из 3, страница 1 из 1
23.08.2017, 18:00
    #39509505
cpp_cpp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог back_inserter, только чтобы передавал ссылку, а не сам элемент
Здравствуйте,
вопрос возможно получился не понятным, по коду должно быть яснее
здесь back_ref_inserter это собственный класс, который должен работать также как и std::back_inserter,
только вместо значения должен передавать ссылку или указатель на элемент

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
int main()
{
	std::vector<int> v1{ 1, 2 ,3, 4, 5, 6, 7, 8, 9, 10 };
	std::vector<int*> v2;

	std::copy_if(v1.begin(), v1.end(), back_ref_inserter(v2), [](int i) {
		return i % 2 == 0;
	});
}



Я попробовал унаследоваться от std::back_insert_iterator и переопределить только метод приравнивания,
но у меня ничего не получилось
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
template<class T>
class back_ref_iterator : public std::back_insert_iterator<T>
{
public:
	_Myt& operator=(const _Valty& _Val)
	{	// push value into container
		container->push_back(&_Val);
		return (*this);
	}
};

template<class _Container> inline
back_ref_iterator<_Container> back_ref_inserter(_Container& _Cont)
{	// return a back_insert_iterator
	return (back_ref_iterator<_Container>(_Cont));
}



В правильном направление я копаю или есть решение проще?
...
Рейтинг: 0 / 0
23.08.2017, 21:10
    #39509583
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог back_inserter, только чтобы передавал ссылку, а не сам элемент
cpp_cppесть решение проще?
Конечно )))
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
int main()
{
    std::vector<int> v1{ 1, 2 ,3, 4, 5, 6, 7, 8, 9, 10 };
    std::vector<int*> v2;

    std::for_each(v1.begin(), v1.end(), [&v2](int& i) {
        if (i % 2 == 0)
            v2.push_back(&i);
    });
}


Или вообще так:
Код: plaintext
1.
2.
3.
4.
    for (auto& i: v1) {
        if (i % 2 == 0)
            v2.push_back(&i);
    }
...
Рейтинг: 0 / 0
23.08.2017, 22:26
    #39509615
cpp_cpp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
аналог back_inserter, только чтобы передавал ссылку, а не сам элемент
Anatoly Moskovsky,

Спасибо ))
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / аналог back_inserter, только чтобы передавал ссылку, а не сам элемент / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]