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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.09.2010, 00:17   #1
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию алгоритм находит только первое вхождение find_if

Код:
#include<iostream>
#include<iterator>
#include<algorithm>
#include<vector>
#include<time.h>
#include<fstream>
#include<deque>
#include<string>
#include<typeinfo>
#include<string.h>
#include<conio.h>
#include<iomanip>
using namespace std;

class PC
{
public:
	string name;
	int ram;
	int hdd;
	
	PC();
	PC(string pr,int ram,int hdd);
	void Display()
{
	cout<<setw(5)<<name<<setw(10)<<hdd<<"  "<<ram<<"  "<<endl;
	ofstream out("test.txt",ios::out);
}
	static bool SortName(const PC &a, const PC &b)
	{
		return(a.name < b.name);
	}
	static bool SortHdd(const PC &c,const PC &d)
	{
		return(c.hdd>d.hdd);
	}
	static bool SortMem(const PC&e,const PC &f)
	{
		return(e.ram>f.ram);
	}
	static  bool Serch(const PC &r)
	{
		return r.name=="AMD";
	}
	static bool Show(const PC &s)
	{
		return s.name=="AMD";
	}
	static bool ShowR(const PC &r)
	{
		return r.ram>=4096;
	}
};
PC::PC()
{
		this->name="Core2Duo";
		this->hdd=1000;
		this->ram=2048;
}
PC::PC(string pr,int ram,int hdd)
{
		this->name=pr;
		this->hdd=hdd;
		this->ram=ram;
}


void main()
{
	int n=0;
	ostream_iterator<int,char>out_it (cout," ");
	vector<PC> pc;
	vector<PC>::iterator it;
	vector<PC>::iterator it1;
	pc.push_back(PC("Intel",1500,4096));
	pc.push_back(PC("AMD",320,2048));
	pc.push_back(PC("Apple",1000,4096));
	pc.push_back(PC("AMD",512,120));
	pc.push_back(PC("I7",2000,32000));
	pc.push_back(PC("Quad",640,2048));
	pc.push_back(PC("AMD",6000,4096));
	cout<<pc.size()<<endl;
	sort(pc.begin(),pc.end(), &PC::SortName);
	for(vector< PC >::iterator i = pc.begin(); i != pc.end(); i++ )
	{
      i->Display();
	  
	}
	cout<<"-------------------------"<<endl;
	sort(pc.begin(),pc.end(),&PC::SortHdd);
	for(vector< PC >::iterator i = pc.begin(); i != pc.end(); i++ )
	{
      i->Display();
	}
	cout<<"--------------------------"<<endl;
	sort(pc.begin(),pc.end(),&PC::SortMem);
	for(vector< PC >::iterator i = pc.begin(); i != pc.end(); i++ )
	{
      i->Display();
	}
	cout<<"-------------------------"<<endl;
	count_if(pc.begin(),pc.end(),&PC::Serch);
	cout<<"Computer width proccesor AMD-"<<count_if(pc.begin(),pc.end(),&PC::Serch)<<endl;
	it = pc.begin();
	while ((it=find_if(it ,pc.end(),&PC::Show)) != pc.end())
	{
		cout << it->name<<'\t' <<it->hdd<<'\t'<<it->ram<<endl;
		++it;
		
	}
	it1 = pc.begin();
	cout<<"------------------------------"<<endl;
	while ((it1=find_if(it1 ,pc.end(),&PC::ShowR)) != pc.end())
	{
		cout << it1->name<<'\t' <<it1->hdd<<'\t'<<it1->ram<<endl;
		++it1;
	}

}
не могу понять абсолютно одинаково написаны один алгоритм работает коректно , а второй находит только первое вхождение
Progsenya вне форума Ответить с цитированием
Старый 11.09.2010, 01:13   #2
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
static bool ShowR(const PC &r)
	{
		return r.hdd >= 4096;
	}
ты видимо хотел сравнивать с hdd
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 11.09.2010, 01:53   #3
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию

мне нужно вывести на экран все компьютеры озу которых от 4096 и более
Progsenya вне форума Ответить с цитированием
Старый 11.09.2010, 02:32   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

все верно, твоему условию удовлетворяет только одно значение
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 11.09.2010, 07:48   #5
Progsenya
Пользователь
 
Регистрация: 30.05.2010
Сообщений: 80
По умолчанию

а как зделать чтобы оны выводило все у которых 4096 и более?
Progsenya вне форума Ответить с цитированием
Старый 11.09.2010, 10:38   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Посмотрите на порядок параметров в конструкторе и что в конструкторы передаётся. Не перепутали случаем местами 2 и 3 параметры?
pu4koff вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вхождение подстроки в строку! Edimus Общие вопросы C/C++ 4 04.04.2011 07:50
реализация алгоритма find_if Progsenya Общие вопросы C/C++ 2 10.09.2010 23:58
Проверить вхождение числа, по биту slips JavaScript, Ajax 3 28.08.2009 13:17