Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2012, 22:15   #1
Вовастый
Новичок
Джуниор
 
Регистрация: 30.07.2010
Сообщений: 2
По умолчанию Не могу разобраться в функции.

Функция filter() ищет элементы в исходном контейнере, значения которых соответствуют условию (значению), переданному в функцию при ее вызове, потом копирует найденные значения элементов в целевой контейнер.
Беда в том, что если копировать элементы с исходного контейнера в целевой посредством присваивания, программа работает, но при этом нужно объявлять вектор и указывать его размер, а так как размер вектора может превышать реальное количество элементов в нем, логичным выглядит копирование посредством вставки нового элемента в контейнер баз объявленного размера, но тут у меня возникли трудности и мне срочно нужна подсказка, так как сам я это пока не осилю. Заранее спасибо.

Код:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <functional>

using namespace std;

//шаблон функции filter 
template <typename InputIterator, typename OutputIterator,
		  typename ElemType, typename Comp>
OutputIterator filter(InputIterator first, OutputIterator last,
	OutputIterator at, const ElemType &val, Comp pred)
{
	while((first = find_if(first, last, bind2nd(pred, val))) != last)
	{
		cout << "найдено: " << *first << endl;
		*at++ = *first++;
	}
	return at;
}


int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Rus");

	const int elem_size = 8;

	int ia[elem_size] = {12, 8, 43, 0, 6, 21, 3, 7};
	vector<int> ivec(ia, ia+elem_size);

	int ia2[elem_size];
//не задаю размер вектора, так как буду использовать вставку элементов вместо присваивания...
	vector<int> ivec2;

	cout << "отфильтровываю из массива числа меньше 8\n";
	filter(ia, ia+elem_size, ia2, elem_size, less<int>());

	cout << "отфильтровываю из массива числа больше 8)\n";
//...но к сожалению функция не работает со вставкой
	filter(ivec.begin(), ivec.end(), back_inserter(ivec2), elem_size, greater<int>());
	return 0;
}

Последний раз редактировалось ACE Valery; 21.12.2012 в 22:53.
Вовастый вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу разобраться! romanov0303 C++ Builder 1 12.03.2012 10:48
не могу разобраться as1212 Помощь студентам 0 15.11.2011 21:10
Не могу разобраться Xoksik Общие вопросы по Java, Java SE, Kotlin 4 27.03.2011 23:36
Не могу разобраться Lokin Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 22.03.2010 22:45
не могу разобраться Инспектор ГУЛ Свободное общение 7 20.09.2009 09:29