Re: Stroustrup 5.9 exercise 11
On Apr 10, 1:56 am, "Daniel T." <danie...@earthlink.net> wrote:
"arnuld" <geek.arn...@gmail.com> wrote:
1.) why do i need to "copy" the whole vector ?
You have to copy the whole vector to cout. That is what you are doing
when you print all the strings.
OK, it means , "std::cout" always copies its input.
2.) is "std::cout" is less maintainable/readable than
"ostream_iterator" ?
No, but the loop itself is.
for ( std::vector<std::string>::iterator i = collected_input.begin();
i != collected_input.end(); ++i )
{
cout << *i << '\n';
}
The above works, but if you decide to change the container to anything
other than a vector, you have to change the loop also.
for ( unsigned i = 0; i < collected_input.size(); ++i )
{
cout << collected_input[i] << '\n';
}
The above also works but only for vectors and deques, not for lists or
sets.
i tried std::set, it does not make any sense to me, as of now. it is
on page 491, section 17.4.3 of Stroustrup (special edition).
With std::set, you insert the item instead of using push_back and it
keeps the items sorted.
What you came up with is great for satisfying the last sentence of the
requirement, but not the first 3.
i got it, you mean it is not a good programme at all. i need to
rewrite.
The hardest part of this exorcise is to remove duplicates *without*
sorting the input.
that is what "std::set" does. here is my try with a compile-time error
i am unable to figure out why. i tried eve "std::ostream_iterator" but
same error:
-------- PROGRAMME --------
#include<iostream>
#include<string>
#include<algorithm>
#include<set>
#include<iterator>
int main()
{
std::string input_word;
std::set<std::string> s; // collects inputs
while(std::cin >> input_word && input_word != "quit")
{
s.insert(input_word);
}
std::cout << "\n *** Printing Sorted Words ***\n";
std::copy(s.begin(), s.end(),
ostream_iterator<std::string>(std::cout, '\n');
return 0;
}
----- OUTPUT ---------
[arch@voodo tc++pl]$ g++ -ansi -pedantic -Wall -Wextra -O
ex_5.9-11_modified.cpp
ex_5.9-11_modified.cpp: In function 'int main()':
ex_5.9-11_modified.cpp:30: error: 'ostream_iterator' was not declared
in this scope
ex_5.9-11_modified.cpp:30: error: expected primary-expression before
'>' token
ex_5.9-11_modified.cpp:30: warning: left-hand operand of comma has no
effect
[arch@voodo tc++pl]$