Re: order of istream_iterator and cout statements
On 5/4/2010 8:26 AM, subramanian100in@yahoo.com, India wrote:
[..] consider the following program y.cpp:
#include<cstdlib>
#include<iostream>
#include<string>
#include<iterator>
using namespace std;
int main()
{
string x("test string");
istream_iterator<string> isi(cin);
cout<< "x = "<< x<< endl;
cout<< "string entered: "<< isi->c_str()<< endl;
return EXIT_SUCCESS;
}
In this program, the istream_iterator and the first cout statements
are interchanged.
I compiled this program as
g++ -std=c++98 -pedantic -Wall -Wextra y.cpp
When I ran this program, it first waited for user input. For this I
entered:
sample
It then printed:
x = test string
string entered: sample
Why doesn't the second program y.cpp behave similar to the first
program x.cpp ?
For some reason I am thinking you're not looking for a simple answer
like, "because they are two different programs"...
> For the second program also, I expected the following
to be printed first:
x = test string
Why? The 'istream_iterator' is defined like this:
24.5.1 Class template istream_iterator [lib.istream.iterator]
1 istream_iterator reads (using operator>>) successive elements
from the input stream for which it was constructed. After it is
constructed, and every time ++ is used, the iterator reads and
stores a value of T.
That means that it reads one value from the stream right after
construction. You can think that the reading of one 'std::string' is
done as the *last step of initializing* your stream with 'cin'.
This should have been followed by user input
"Should"? What makes you think that? What *source* do you use?
> and then finally the
following should have been printed:
string entered: whatever user gave as input
But this doesn't happen with the second program y.cpp. What is the
difference between the two programs ?
Uh... Hello? Can't you tell?
> I am unable to understand why
the interchanging of the istream_iterator statement and first cout
statement causes different program output.
RTFM, I guess.
V
--
I do not respond to top-posted replies, please don't ask