<pre name="code" class="cpp">#include "stdafx.h"
#include <list>
#include <string>
#include <iostream>
using namespace std;
#define MAXTCPCONNECT 1000
struct RemoteSOCKINFO
{
int s; //socket
char szIp[50];
int nPort;
};
struct myList{
int p;
RemoteSOCKINFO rs[MAXTCPCONNECT]; //max connect
};
typedef myList* pmyList;
void My_sort(myList* pList) {
if (pList->p == 0) return;
myList *Temp = new myList[pList->p];
//将pList 数据拷贝到Temp
for (int i = 0; i <= pList->p; ++i) {
memcpy(&(Temp->rs[i]), &(pList->rs[i]), sizeof(RemoteSOCKINFO));
}
//重置pList
int j = 0;
for (int i = 0; i <= pList->p; ++i) {
if (Temp->rs[i].s == -1) {
continue;
}
pList->rs[j].nPort = Temp->rs[i].nPort;
pList->rs[j].s = Temp->rs[i].s;
strcpy(pList->rs[j].szIp, Temp->rs[i].szIp);
++j;
}
//除去无效数据
for (int i = j; i <= pList->p; ++i) {
pList->rs[j].nPort = -1;
pList->rs[j].s = -1;
strcpy(pList->rs[j].szIp, "");
}
//注意 这个p将把下标移动到最后一个有效数据上 数量=p+1
//比如 rs[6] 那么p = 6 但是真实数量是6+1
pList->p = j-1;
}
int _tmain(int argc, _TCHAR* argv[])
{
pmyList m_list = new myList;
m_list->p = 6;
m_list->rs[0].s = 1;
m_list->rs[0].nPort = 1;
strcpy(m_list->rs[0].szIp,"000");
m_list->rs[1].s = 2;
m_list->rs[1].nPort = 2;
strcpy(m_list->rs[1].szIp, "111");
m_list->rs[2].s = -1;
m_list->rs[2].nPort = -1;
strcpy(m_list->rs[2].szIp, "-222");
m_list->rs[3].s = -1;
m_list->rs[3].nPort = -1;
strcpy(m_list->rs[3].szIp, "-333");
m_list->rs[4].s = 1;
m_list->rs[4].nPort = 1;
strcpy(m_list->rs[4].szIp, "444");
m_list->rs[5].s = -1;
m_list->rs[5].nPort = -1;
strcpy(m_list->rs[5].szIp, "-555");
m_list->rs[6].s = 6;
m_list->rs[6].nPort = 6;
strcpy(m_list->rs[6].szIp, "666");
for (int i = 0; i <= m_list->p; i++) {
cout << m_list->rs[i].szIp << endl;
}
cout << "以上为初始的" << m_list->p << endl;
My_sort(m_list);
for (int i = 0; i <= m_list->p; i++) {
cout << m_list->rs[i].szIp << endl;
}
cout << "以上为新的" << m_list->p << endl;
system("pause");
return 0;
}<pre name="code" class="cpp">#include "stdafx.h