E
eric
Dear advanced c/g++ programers:
A program request me to enter twice input
that program probably is tested good on visual c++ 7.1 on window xp,
but my system is g++ on linux(Ubuntu10.04)
It assume
Enter some strings: a b c d
^Z
Enter some more strings: d e f g
^Z
Union: a b c d e f g
Difference: a b c
Intersection: d
all these you can get from page 273 and 274 of book(c++ cookbook)
but my test result is
-------------------------------
eric@eric-laptop:~/cppcookbook/ch7$ ./a.out
Enter a series of strings: a b c d
^Z
[7]+ Stopped ./a.out
eric@eric-laptop:~/cppcookbook/ch7$ ./a.out
Enter a series of strings: a b c d
{a, b, c, d}
Segmentation fault
-------------------------------------------------------------------
second case , I used <Enter><Control-D>
first case, I used <Enter><Control-Z>
the following in the program I tested, you still can download from
http://examples.oreilly.com/9780596007614/
------------------------------------------------------------------------------------------------
// Example 7-8. Unsing set operations
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <iterator>
#include "utils.h" // For parintContainer(): see 7.10
using namespace std;
int main() {
cout << "Enter some strings: "
istream_iterator<string> start(cin);
istream_iterator<string> end;
set<string> s1(start, end);
cin.clear();
cout << "Enter some more strings: ";
set<string> s2(++start, end);
set<string> setUnion;
set<string> setInter;
set<string> setDiff;
set_union(s1.begin(), s1.end(),
s2,begin(), s2.end(),
inserter(setUnion, setUnion.begin()));
set_difference(s1.begin(), s1.end(),
s2.begin(), s2.end(),
inserter(setDiff, setDiff.begin()));
cout << "Union:\n";
printContainer(setUnion);
cout << "Difference:\n";
printContainer(setDiff);
cout << "Intersection:\n";
printContainer(setinter);
}
--------------------------------------------------------------------------------------------------
utils.h
-------------------------------
// Example 7-12. Writing your own printing function
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
template<typename C>
void printContainer(const C& c, char delim = ',', ostream& out = cout)
{
printRange(c.begin(), c.end(), delim, out);
}
template<typename Fwd>
void printRange(Fwd first, Fwd last, char delim = ',', ostream& out =
cout) {
out << "{";
while (first != last) {
out << *first;
if (++first != last)
out << delim << ' ';
}
out << "}" << endl;
}
A program request me to enter twice input
that program probably is tested good on visual c++ 7.1 on window xp,
but my system is g++ on linux(Ubuntu10.04)
It assume
Enter some strings: a b c d
^Z
Enter some more strings: d e f g
^Z
Union: a b c d e f g
Difference: a b c
Intersection: d
all these you can get from page 273 and 274 of book(c++ cookbook)
but my test result is
-------------------------------
eric@eric-laptop:~/cppcookbook/ch7$ ./a.out
Enter a series of strings: a b c d
^Z
[7]+ Stopped ./a.out
eric@eric-laptop:~/cppcookbook/ch7$ ./a.out
Enter a series of strings: a b c d
{a, b, c, d}
Segmentation fault
-------------------------------------------------------------------
second case , I used <Enter><Control-D>
first case, I used <Enter><Control-Z>
the following in the program I tested, you still can download from
http://examples.oreilly.com/9780596007614/
------------------------------------------------------------------------------------------------
// Example 7-8. Unsing set operations
#include <iostream>
#include <algorithm>
#include <string>
#include <set>
#include <iterator>
#include "utils.h" // For parintContainer(): see 7.10
using namespace std;
int main() {
cout << "Enter some strings: "
istream_iterator<string> start(cin);
istream_iterator<string> end;
set<string> s1(start, end);
cin.clear();
cout << "Enter some more strings: ";
set<string> s2(++start, end);
set<string> setUnion;
set<string> setInter;
set<string> setDiff;
set_union(s1.begin(), s1.end(),
s2,begin(), s2.end(),
inserter(setUnion, setUnion.begin()));
set_difference(s1.begin(), s1.end(),
s2.begin(), s2.end(),
inserter(setDiff, setDiff.begin()));
cout << "Union:\n";
printContainer(setUnion);
cout << "Difference:\n";
printContainer(setDiff);
cout << "Intersection:\n";
printContainer(setinter);
}
--------------------------------------------------------------------------------------------------
utils.h
-------------------------------
// Example 7-12. Writing your own printing function
#include <iostream>
#include <string>
#include <algorithm>
#include <iterator>
#include <vector>
using namespace std;
template<typename C>
void printContainer(const C& c, char delim = ',', ostream& out = cout)
{
printRange(c.begin(), c.end(), delim, out);
}
template<typename Fwd>
void printRange(Fwd first, Fwd last, char delim = ',', ostream& out =
cout) {
out << "{";
while (first != last) {
out << *first;
if (++first != last)
out << delim << ' ';
}
out << "}" << endl;
}