vector改成LIST
vector改为LIST?
如果上面的vector 全部改为
typedef list<tagDXFLine> CDXFLineList;
下面的代码中用到vector要如何改呢?
------解决方案--------------------
你的使用方式,似乎vector更好了。
------解决方案--------------------
- C/C++ code
typedef struct tagDXFLine { CPoint startPoint; CPoint endPoint; }DXFLINE; typedef std::vector<tagDXFLine> CDXFLineList;
如果上面的vector 全部改为
typedef list<tagDXFLine> CDXFLineList;
下面的代码中用到vector要如何改呢?
- C/C++ code
int TxtSize; TxtSize=m_mDXFTxtList.size();//有多少个文字 int LineSize=0; CDXFLineList tempDXFLineList;//保存临时的线条 m_mDXFTxtList.sort(); BOOL bAdd = FALSE; list <tagDXFTxt>::iterator tempDXFTxtList; DXFLINE srcLine; m_myBufferList.clear(); //文字进行排序 for ( tempDXFTxtList = m_mDXFTxtList.begin();tempDXFTxtList != m_mDXFTxtList.end(); tempDXFTxtList++ ) { CString test; test.Format(_T("%d\n%sx:%d\ny:%d\n"),tempDXFTxtList->Num,tempDXFTxtList->TxtContents,tempDXFTxtList->point.x,tempDXFTxtList->point.y); //AfxMessageBox(test); tempDXFLineList.clear(); LineSize=m_myDXFLineList.size();//有多少条 for (int i=0;i<LineSize;i++) { if ((tempDXFTxtList->point ==m_myDXFLineList.at(i).startPoint)) { srcLine.startPoint = m_myDXFLineList.at(i).startPoint; srcLine.endPoint = m_myDXFLineList.at(i).endPoint; tempDXFLineList.push_back(srcLine); m_myDXFLineList.erase(m_myDXFLineList.begin()+i); break; }else if(tempDXFTxtList->point == m_myDXFLineList.at(i).endPoint) { srcLine.startPoint = m_myDXFLineList.at(i).endPoint; srcLine.endPoint = m_myDXFLineList.at(i).startPoint; tempDXFLineList.push_back(srcLine); m_myDXFLineList.erase(m_myDXFLineList.begin()+i); break; } } //AfxMessageBox(_T("3")); DWORD t1 = timeGetTime(); int LineCount=m_myDXFLineList.size(); for (int j=m_myDXFLineList.size()-1; j>=0; j--) { DXFLINE tempLine; int x2=tempDXFLineList.at(tempDXFLineList.size()-1).endPoint.x; int y2=tempDXFLineList.at(tempDXFLineList.size()-1).endPoint.y; int x1= m_myDXFLineList.at(j).startPoint.x; int y1= m_myDXFLineList.at(j).startPoint.y; int endx1= m_myDXFLineList.at(j).endPoint.x; int endy1= m_myDXFLineList.at(j).endPoint.y; bAdd = FALSE; if ((m_myDXFLineList.at(j).startPoint==tempDXFLineList.at(tempDXFLineList.size()-1).endPoint)) { tempLine.startPoint=m_myDXFLineList.at(j).startPoint; tempLine.endPoint=m_myDXFLineList.at(j).endPoint; tempDXFLineList.push_back(tempLine); m_myDXFLineList.erase(m_myDXFLineList.begin()+j); bAdd = TRUE; }else if (m_myDXFLineList.at(j).endPoint==tempDXFLineList.at(tempDXFLineList.size()-1).endPoint) { tempLine.startPoint=m_myDXFLineList.at(j).endPoint; tempLine.endPoint=m_myDXFLineList.at(j).startPoint; tempDXFLineList.push_back(tempLine); m_myDXFLineList.erase(m_myDXFLineList.begin()+j); bAdd = TRUE; } if (bAdd) { j=m_myDXFLineList.size(); } } m_myBufferList.push_back(tempDXFLineList); DWORD t2 = timeGetTime(); double spend=(double)(t2-t1); CString msg; msg.Format(_T("运行完成,一共花费时间为:%d毫秒"),(int)spend); // AfxMessageBox(msg); }
------解决方案--------------------
你的使用方式,似乎vector更好了。
------解决方案--------------------