Vector.Erase?
Hi, all:
I am trying to migrate a VC++ 6.0 code into VS 2005. it is the code of
Typing Aid ComboBox comes from
http://www.codeguru.com/cpp/controls/combobox/article.php/c4951/.
Looks like std::vector does not support erase items like array
anymore.
m_vSections.erase(&m_vSections[i--]);
So I tried to change it using iterator, but the result does not acting
the same. Can somebody take a look on what I am doing wrong?
Also, if you guys have a better reference for a Typing Aid comboBox
(show muitiple Col in the drop down, when user type, looking for the
first match item in the dropdown. please guide me or show me the
hyperlinks.
Thanks in advance.
-rockdale
------------------------------------------------------
std::vector<CPoint> m_vSections;
void SectionSet::DeleteChars(UINT left, UINT right)
{
UINT width = right - left + 1;
for (int i = 0; i < m_vSections.size(); i++) {
// if the entire section is contained within
// the range (left, right) then delete the section
if (m_vSections[i].x >= left && m_vSections[i].y <= right){
//m_vSections.erase(&m_vSections[i--]); //non-support operation
//this is the start of my code to replace the above line
std::vector<CPoint>::iterator vecItr;
i--;
if(i<0) i=0;
for(vecItr=m_vSections.begin();
vecItr != m_vSections.end();
++vecItr)
{
if((m_vSections[i].y==vecItr->y)&&(
m_vSections[i].x==vecItr->x))
m_vSections.erase(vecItr);
break;
}
//this is the end of my code to replace the above line.
}
// if the left index is in this section
// delete until right section index
else if (IsInSection(i, left)) {
if (IsInSection(i, right))
m_vSections[i].y -= width;
else
m_vSections[i].y = left;
if (CheckAndDeleteSection(i))
i--;
}
// else if left index is not in this section, but right is
// delete width of chars in section from right
else if (IsInSection(i, right)) {
m_vSections[i].y -= (right - m_vSections[i].x);
if (CheckAndDeleteSection(i))
i--;
}
else if (m_vSections[i].x > left) {
m_vSections[i].x -= width;
m_vSections[i].y -= width;
}
}
}