Re: iterator_traits::value_type on back_insert_iterator - returns void
anto.anish@gmail.com wrote:
My Requirement is
1. Copy data from iterator to an array ( array should be created
dynamically within the function based on data_type of the data
held by the iterator /container. )
2. Copy data from array into iterator ( array should be created
dynamically within the function based on data_type of the data
held by the iterator /container. )
Implementation
-----------------------
//copies data from begin to end of container to array.
template <class T>
void writeiter( T& iter1, T& iter2)
{
int t2= iter2 -iter1;
cout <<t2<<endl;
iterator_traits<T>::value_type *twrite= new
iterator_traits<T>::value_type[t2];
std::copy(iter1,iter2,twrite);
}
//copies data from array to iter (back_insert_iterator)
template <class T> void readiter( T& iter, int len)
{
//This line does not compile since return is a void.
iterator_traits<T>::value_type *tread= new
iterator_traits<T>::value_type[len]; for (int i=0; i<len;++i)
tread[i] = i;
std::copy(tread, tread+ len,iter );
}
int main()
{
vector <int> v1;
int len=5;
back_insert_iterator< vector<int> > v1back(v1);
readiter(v1back,len); //Does not work - the function does not compile
vector<int>::iterator vbdir1=v1.begin();
vector<int>::iterator vbdir2=v1.end();
writeiter(vbdir1,vbdir2); //works good
}
The readiter function does not compile since a
iterator_trait::value_type of back_insert_iterator's returns void.
It doesn't "return" void. It's defined as 'void'. IOW, the insert
iterator (back_insert_iterator is an insert iterator) does NOT have
a value type because it cannot be _dereferenced_ except for the
purpose of _assigning_ to the result of dereferencing. The insert
iterators adhere to the rules defined for _output_ iterators. You
cannot expect to _input_ anything (like you're trying to do in your
'readiter' function) using an _output_ iterator.
what i would need is to get the datatype of the container which is INT
held by the back_insert_iterator.
No such thing exists. By definition nothing is _held_ by an *insert*
iterator. It inserts and moves on.
My assumption was that i would get
the iterator_traits of back_insert_iterator from function readiter ,
which would later be used to create an array or a array of pointers.
Any help appreciated?
Rethink your solution. Start by understanding what 'insert iterator'
is for.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask