- 13 Ocak 2018
- 41
- 0
İyi günler! 145 sırada bir sorunla karşılaşıyorum, yardımcı olursanız sevinirim. Kırmızı ile işaretledim.
Kod:
#pragma warning(disable: 4018)
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <vector>
#include <functional>
#include <iterator>
using namespace std;
class CTVSet
{
string m_strProducer;
int m_iSize;
public:
CTVSet() {}
CTVSet(int iSize, const string& strProd = "")
{
m_strProducer = strProd;
m_iSize = iSize;
}
CTVSet(const CTVSet& e)
{
m_strProducer = e.m_strProducer;
m_iSize = e.m_iSize;
}
~CTVSet() {}
const string& GetProducer() const { return m_strProducer; }
const int GetSize() const { return m_iSize; }
**** Output(ostream& toStream) const
{
toStream << "Company: " << GetProducer() << "Size: " << GetSize() << endl;
}
**** Input(istream& fromStream)
{
fromStream >> m_strProducer >> m_iSize;
}
friend ostream& operator<<(ostream&, const CTVSet&);
friend istream& operator >> (istream& fromStream, CTVSet& stud);
CTVSet& operator=(const CTVSet& st)
{
m_strProducer = st.m_strProducer;
m_iSize = st.m_iSize;
return *this;
}
bool operator<(const CTVSet& e)
const {
return m_iSize < e.m_iSize;
}
bool operator == (const CTVSet& e)
const {
return m_iSize == e.m_iSize;
}
};
ostream& operator<<(ostream& toStream, const CTVSet& set)
{
set.Output(toStream);
return toStream;
}
istream& operator>>(istream& fromStream, CTVSet& set)
{
set.Input(fromStream);
return fromStream;
}
class CTVSetShop
{
string m_strProducer;
vector<CTVSet> m_vSales;
public:
const string& GetProducer() const { return m_strProducer; }
CTVSetShop(vector<CTVSet>& v)
{
m_vSales = v;
}
CTVSetShop() {}
**** readIn(ifstream iStream);
**** writeTo(ostream oStream);
**** maxSalesByProducer(string& strProducer, int& iNum);
**** maxSalesBySize(int& iSize, int& iNum);
};
int lessProducer(const CTVSet& a, const CTVSet& b)
{
return a.GetProducer() < b.GetProducer();
}
int eqProducer(const CTVSet& a, const CTVSet& b)
{
return a.GetProducer() == b.GetProducer();
}
class eqProducerF
{
public:
eqProducerF(CTVSetShop& init)
{
comparable = init;
}
bool operator()(const CTVSetShop& x)
const {
return comparable.GetProducer() == x.GetProducer();
}
private:
CTVSetShop comparable;
};
**** CTVSetShop::maxSalesBySize(int& iSize, int& iNum) {
iSize = 0; iNum = 0;
vector <CTVSet> uniqSizes;
sort(m_vSales.begin(), m_vSales.end());// , ptr_fun(bySize));
unique_copy(m_vSales.begin(), m_vSales.end(), back_inserter(uniqSizes));
for (int i = 0; i < uniqSizes.size(); i++) {
int iCurrent = count(m_vSales.begin(), m_vSales.end(), uniqSizes[i]);
iNum = ((iCurrent > iNum) ?
(iSize = uniqSizes[i].GetSize(), iCurrent) : iNum);
}
}
**** CTVSetShop::maxSalesByProducer(string& strProducer, int& iNum) {
vector<string> remaining;
strProducer = "N/A"; iNum = 0;
vector <CTVSetShop> uniqProducers;
sort(m_vSales.begin(), m_vSales.end(), ptr_fun(lessProducer));
unique_copy(m_vSales.begin(), m_vSales.end(), back_inserter(uniqProducers), eqProducer);
for (int i = 0; i < uniqProducers.size(); i++) {
int iCurrent = count_if(m_vSales.begin(), m_vSales.end(), eqProducerF(uniqProducers[i]));
iNum = ((iCurrent > iNum) ?
(strProducer = uniqProducers[i].GetProducer(), iCurrent) : iNum);
}
}
**** CTVSetShop::readIn(ifstream ifile) {
if (m_vSales.size()) {
m_vSales.clear();
}
copy(istream_iterator<CTVSet>(ifile),
istream_iterator<CTVSet>(),
back_inserter(m_vSales));
}
**** CTVSetShop::writeTo(ostream oStream) {
copy(m_vSales.begin(),
m_vSales.end(),
ostream_iterator<CTVSet>(oStream, "\n"));
}
int main() {
CTVSetShop vectShopData;
vectShopData.readIn(ifstream("file.txt"));
[COLOR=Red][U]vectShopData.writeTo(cout);[/U][/COLOR]
cout << "**********\n";
string strProd;
int iSize, iNum;
vectShopData.maxSalesBySize(iSize, iNum);
cout << "Max Sales by size (" << iSize << " " << iNum << ")\n";
vectShopData.maxSalesByProducer(strProd, iNum);
cout << "Max Sales by producer (" << strProd << " " << iNum << ")\n";
return 0;
}
Moderatör tarafında düzenlendi: