Re: std::vector : begin, end and insert - Using Objects instead of ints
Where and what is your compiler error?
MyVector.cpp(74): error C2664: 'std::vector<_Ty>::const_reference
std::vector<_Ty>::at(std::vector<_Ty>::size_type) const' : cannot convert
parameter 1 from 'std::allocator<_Ty>::value_type' to
'std::vector<_Ty>::size_type'
with
[
_Ty=CPoint
]
and
[
_Ty=CPoint
]
and
[
_Ty=CPoint
]
It says that Allocator Type != Size type.
It is just std::vector<CPoint(or your generic T>::iterator :)
And David is right: you access the associated vector item using
*_Iter.
It does work for iterations for(Iter = Pt.begin(); Iter < Pt.end(), Iter++)
But, since the allocator type is CPoint, it is not an int.
So, *_Iter does not return an int.
It seems to return the .x variable of CPoint.
Also, I am having trouble inserting the point
Please excuse the code posting.
When I finally figure out why the code is not pasting correctly
I can paste more formatted code.
I haven't rebooted in a while and I think automatic updates is
messing things up. I am getting errors user32.dll was relocated.
***This might not be formatted correctly ***
std::vector<CPoint> m_Pts;
CPoint Pt(2, 4);
//--------------------------------------------------------------------------------- // Fill Collection //--------------------------------------------------------------------------------- for (UINT i = 1; i < 11; i++) { CPoint Pt; Pt.x = i; Pt.y = i; m_Pts.push_back(Pt); } //--------------------------------------------------------------------------------- // at : Returns a reference to the element at a specified location in thevector. //--------------------------------------------------------------------------------- for (UINT i = 0; i < 10; i++) { CPoint& rPt = m_Pts.at(i); TRACE("Pt[%d] Pt.x %d, Pt.y %d\n", i, rPt.x, rPt.y); } //--------------------------------------------------------------------------------- // begin : A random-access iterator addressing the first element in thevector or // to the location succeeding an empty vector. You should alwayscompare // the value returned with vector::end to ensure it is valid. // // end : A random-access iterator to the end of the vector object. Youshould // compare the value returned to vector::begin to ensure it is valid. // //--------------------------------------------------------------------------------- m_Pts.resize(20); std::vector<CPoint>::const_iterator m_cIter; // *c1_cIter = 200; Error. c1_cIter is constant. m_cIter = m_Pts.begin(); TRACE("Position of Iterator: %d\n", *m_cIter); std::vector<CPoint>::iterator m_Iter; m_Iter = m_Pts.begin(); TRACE("Position of Iterator: %d\n", *m_Iter); m_Iter = m_Pts.end(); TRACE("Position of Iterator: %d\n", *m_Iter); *m_Iter = 10; TRACE("Position of Iterator: %d\n", *m_Iter); for (UINT i = 0; i < m_Pts.size(); i++) { CPoint& rPt = m_Pts.at(i); TRACE("Pt[%d] Pt.x %d, Pt.y %d\n", i, rPt.x, rPt.y); } for(m_Iter = m_Pts.begin(); m_Iter < m_Pts.end(); m_Iter++) { CPoint& pt = m_Pts.at(*m_Iter); TRACE("Pt[%d] Pt.x %d, Pt.y %d\n", pt.x, pt.y); }