Re: Stroustrup 5.9 exercise 11
"arnuld" <geek.arnuld@gmail.com> wrote:
On Apr 9, 4:38 pm, "Daniel T." <danie...@earthlink.net> wrote:
"arnuld" <geek.arn...@gmail.com> wrote:
std::cout << "\n *** Printing WOrds ***\n";
for(unsigned int i=0; i < collect_input.size(); ++i)
std::cout << collect_input[i]
<< '\n';
A more idiomatic way of doing the above is to use std::copy:
std::copy( collect_input.begin(), collect_input.end(),
ostream_iterator<std::string>( cout, "\n" ) );
return 0;
}
2 questions:
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.
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.
One last thing, I think you will find that the above program will print
words twice if they are entered twice. Look up std::set.
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.
BTW, this is the best i have come up with:
What you came up with is great for satisfying the last sentence of the
requirement, but not the first 3.
The hardest part of this exorcise is to remove duplicates *without*
sorting the input.