Strange errors about set using STL

Y

Yuri CHUANG

This is a example from a textbook,but there are some strange error that
I don't understand.Could anyone give me some help to realize the
operations on set.Thank you very much:)
(I compile it with Dev C++ 4.9.9.2)

#include<iostream>
#include<set>
#include<string>
#include <algorithm>

using namespace std;

typedef set<string> Set;
typedef Set::iterator It;

void print(Set);
Set operator + (Set&,Set&);
Set operator * (Set&,Set&);
Set operator - (Set&,Set&);

int main(void)
{
string str1[]={"A","B","C","D","E","F","G"};
string str2[]={"A","E","I","O","U"};
Set s1(str1,str1+7);
Set s2(str2,str2+5);

print(s1);
print(s2);
print(s1+s2);
print(s1*s2);
print(s1-s2);

return 0;
}

Set operator + (Set& s1,Set& s2)
{
Set s(s1);
s.insert(s2.begin(),s2.end());
return s;
}

Set operator * (Set& s1,Set& s2)
{
Set s(s1);
It
it=set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),s.begin());
s.erase(it,s.end());
return s;
}

Set operator - (Set& s1,Set& s2)
{
Set s(s1);
It
it=set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),s.begin());
s.erase(it,s.end());
return s;
}

void print(Set s)
{
cout<<"{";
for(It it=s.begin();it!=s.end();it++)
{
if(it==s.begin())cout<<*it;
else cout<<","<<*it;
}
cout<<"} "<<"size="<<s.size()<<endl;
}
 
U

unhandledex

Yuri said:
This is a example from a textbook,but there are some strange error that
I don't understand.Could anyone give me some help to realize the
operations on set.Thank you very much:)
(I compile it with Dev C++ 4.9.9.2)

Your code compiled fine on MSVC++ 2005 Express Edition (although there
was a missing } brace at the end of the print() function). What errors
are you getting with Dev-C++?
 
D

Daniel T.

"Yuri CHUANG said:
This is a example from a textbook,but there are some strange error that
I don't understand.

If the below is an example taken directly from a textbook, burn the book.
Could anyone give me some help to realize the
operations on set.Thank you very much:)
(I compile it with Dev C++ 4.9.9.2)

#include<iostream>
#include<set>
#include<string>
#include <algorithm>

using namespace std;

typedef set<string> Set;
typedef Set::iterator It;

void print(Set);
Set operator + (Set&,Set&);
Set operator * (Set&,Set&);
Set operator - (Set&,Set&);

int main(void)
{
string str1[]={"A","B","C","D","E","F","G"};
string str2[]={"A","E","I","O","U"};
Set s1(str1,str1+7);
Set s2(str2,str2+5);

print(s1);
print(s2);
print(s1+s2);
print(s1*s2);
print(s1-s2);

return 0;
}

Set operator + (Set& s1,Set& s2)
{
Set s(s1);
s.insert(s2.begin(),s2.end());
return s;
}

Once a value has been inserted into a set, you can't change it. The
error you are getting is complaining that set_intersection and
set_difference are trying to change the values already contained in 's'.
Set operator * (Set& s1,Set& s2)
{
Set s(s1);
It
it=set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(),s.begin());
s.erase(it,s.end());
return s;
}

Set operator - (Set& s1,Set& s2)
{
Set s(s1);
It
it=set_difference(s1.begin(),s1.end(),s2.begin(),s2.end(),s.begin());
s.erase(it,s.end());
return s;
}

Here are the functions properly written:

Set operator * (const Set& s1,const Set& s2)
{
Set s;
set_intersection( s1.begin(), s1.end(), s2.begin(), s2.end(),
inserter( s, s.begin() ) );
return s;
}

Set operator - (const Set& s1,const Set& s2)
{
Set s;
set_difference( s1.begin(), s1.end(), s2.begin(), s2.end(),
inserter( s, s.begin() ) );
return s;
}

BTW everywhere you have a Set& as a parameter, it should be a const Set&.
 
I

Ian Collins

Your code compiled fine on MSVC++ 2005 Express Edition (although there
was a missing } brace at the end of the print() function). What errors
are you getting with Dev-C++?
Realy??
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,073
Latest member
DarinCeden

Latest Threads

Top