|
민인학 님이 쓰신 글 :
: erase를 하고 erase한 다음의 vector부터 끌어당겨줘야 하나요?
: 안해줘도 잘 되던데요...
erase()를 해서 삭제를 하면,
ImportFilesInfo[2]가 빈 칸으로 남지 않고, 무조건 '자동으로' 끌어당겨집니다.
그렇게 되지 않게 하려면 그 위치에
비어있는(또는 비어있다는 표시를 한) import_file_info 객체를 대입하면 됩니다.
: 혹시 끌어당기지 않으면.. 무슨 문제의 소지를 살 이유라도 있나요?
문제점이라면 역시 제가 아래에 쓴대로
erase()의 비용이 높다는 것이죠. O(N)씩이나 걸리니까요.
: 김백일 님이 쓰신 글 :
: : 민인학 님이 쓰신 글 :
: : : 제목 그대로 인데요...
: : :
: : : struct port_info {
: : : char *PortName;
: : : int PortWidth;
: : : int PortDir;
: : : int PortType;
: : : };
: : :
: : :
: : : struct import_file_info {
: : : char *EdifFile;
: : : int InstanceID;
: : : char *InstanceName;
: : : char *InterfaceModule;
: : : int CmdFifoSize;
: : : int ReadFifoSize;
: : : int WriteFifoSize;
: : : int SlaveReadFifoSize;
: : : int SlaveWriteFifoSize;
: : : char *CLKPort;
: : : char *CLKEdge;
: : : int PortNo; // 포트의 갯수
: : : vector<port_info> PortInfo; // 포트 정보
: : : int ProtID;
: : : int TransatorID;
: : : };
: : :
: : :
: : : vector<import_file_info> ImportFilesInfo;
: : : vector<import_file_info> ImportFilesInfoBackup;
: : :
: : : 예를 들어서...
: : :
: : : ImportFilesInfo의 내용을 ImportFilesInfoBackup로 복사할려면..
: : :
: : : ImportFilesInfoBackup = ImportFilesInfo;
: : : 하면 안되나요?
: : : 이렇게 하니 안되더라구요... 에러는 안나는데...
: :
: : 흠... ImportFilesInfo가 제대로 되어 있다면, 안 될리가 없을 텐데요.
: : 혹시
: : ImportFilesInfoBackup.assign(ImportFilesInfo.begin(), ImportFilesInfo.end());
: : 가 되는지 보세요.
: :
: : : 아참.. 그리고...
: : :
: : : 만약... ImportFilesInfo[2]를 삭제할려면...
: : : 어떻게 해야하죠? ^^
: :
: : ImportFileInfo.erase(ImportFilesInfo.begin() + 2);
: :
: : ImportFilesInfo[2] == *(ImportFilesInfo.begin() + 2)를 삭제한 후에,
: : ImportFilesInfo[3] == *(ImportFilesInfo.begin() + 3)부터
: : ImportFilesInfo[ImportFilesInfo.size() - 1] == *(ImportFilesInfo.end())까지를
: : 전부 다 한 '칸' 씩 앞으로 당겨 놓습니다.
: : (광란(?)의 복사가 일어나는 거죠.)
: : 그러므로 걸리는 시간은 O(N)이나 됩니다. -_-;;
: :
: : 만약 이런 삭제를 자주 해야 한다면, 절대 vector를 쓰지 마시고, list나 deque등을 쓰세요.
: :
: : : 고수님들의 답변 기다립니다.
: :
: :
|