1.描述:
我的类中需要存放strin类型的数据,
而且需要和数据连接,实时跟新该容器的数据。
2,我的思路:
起初:
我打算用一个vector就可以啦~
后来:
我否决了,并不是我觉得vecotr不好,正式因为我想的算法促使我选择不用vector。
3,算法:
起初:
我用了个很拙楼的算法:
假设vFrom是实时得到的数据(新的),vTo是我类中保存的数据(需要去更新的)。
我需要知道vTo中是否:增加(add), 减少(delete)
于是:(伪代码)
foreach in vFrom
foreach in vTo
如果vTo中没有,则:
add
foreach in vTo
foreach in vFrom
如果vFrom中没有,则:
delete
委实汗颜!!!
后来:
我想用一个tmp数据来保存From和To的数据,然后只遍历一次,去除它们都有的成员,那么剩余的分别是add和delete的数据啦~
意思是,我需要使用增删。
所以:
选择数据结构:list
4,贴个代码:
// STL_cmp.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
//#include <map>
//#include <vector>
#include <list>
#include <string>
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
// lFrom模拟实时从数据得到的数据
// lTo模拟本地数据
list<string> lFrom, lTo;
lFrom.push_back("1");
lFrom.push_back("2");
lFrom.push_back("3");
lFrom.push_back("4");
lTo.push_back("1");
lTo.push_back("3");
lTo.push_back("4");
lTo.push_back("5");
list<string> need_to_add = lFrom;
list<string> need_to_delete = lTo;
list<string>::iterator itAdd = need_to_add.begin();
list<string>::iterator itDel;
for (; itAdd != need_to_add.end(); ) {
for (itDel = need_to_delete.begin(); itDel != need_to_delete.end(); ) {
if (*itAdd == *itDel) {
itAdd = need_to_add.erase(itAdd);
itDel = need_to_delete.erase(itDel);
break;
} else {
itAdd++;
}
}
itDel++;
}
need_to_add;
need_to_delete;
while (1);
return 0;
}
5,以上代码有错
list<string> lFrom, lTo;
lFrom.push_back("1");
lFrom.push_back("2");
lFrom.push_back("3");
lFrom.push_back("4");
lTo.push_back("3");
lTo.push_back("4");
lTo.push_back("5");
lTo.push_back("1");
list<string> need_to_add = lFrom;
list<string> need_to_delete = lTo;
list<string>::iterator itAdd = need_to_add.begin();
list<string>::iterator itDel;
int flag = 0;
for (; itAdd != need_to_add.end(); ) {
flag = 0;
for (itDel = need_to_delete.begin(); itDel != need_to_delete.end(); ) {
if (*itAdd == *itDel) {
flag = 1;
itAdd = need_to_add.erase(itAdd);
itDel = need_to_delete.erase(itDel);
break;
} else {
itDel++;
}
}
if (!flag)
itAdd++;
}
need_to_add;
need_to_delete;
lFrom;
lTo;