vector+struct在数据接口中的应用
开发的时候,经常需要设计数据列表的接口,有时数据列表个数又是可变的。
1.UserInfo.h
#pragma once
#include <vector>
using std::vector;
typedef struct _stuUserInfo
{
char UserName[20];
char CNUserName[20];
long UserID;
}UserInfo;
class CUserInfo
{
public:
CUserInfo(void);
virtual ~CUserInfo(void);
BOOL GetUserInfo(vector<UserInfo> &vUserInfo);
};
2.UserInfo.cpp
BOOL CUserInfo::GetUserInfo(vector<UserInfo> &pvUserInfo)
{
UserInfo stuUserInfo;
memset(&stuUserInfo,0,sizeof(UserInfo));
CString strUserName;
CString strCNUserName;
long nUserID = 0;
for (long i=0;i<12;i++)
{
strUserName.Format(_T("Izhouwei%d"),i);
strCNUserName.Format(_T("周伟%d"),i);
strcpy_s(stuUserInfo.CNUserName,strUserName.GetBuffer(0));
strcpy_s(stuUserInfo.UserName,strCNUserName.GetBuffer(0));
stuUserInfo.UserID = i;
if (i % 3 == 0)
{
pvUserInfo.push_back(stuUserInfo);
}
else
{
pvUserInfo.insert(pvUserInfo.begin(),stuUserInfo);
}
}
vector<UserInfo> vUserInfoTemp(1);
vUserInfoTemp[0] = pvUserInfo[11];
pvUserInfo[11] = pvUserInfo[1];
pvUserInfo[1] = vUserInfoTemp[0];
return TRUE;
}
3.调用过程
void CTest001Dlg::OnBnClickedButton1()
{
vector<UserInfo> vUserInfo;
CUserInfo userInfo;
userInfo.GetUserInfo(vUserInfo);
CString strMessage = NULL;
//采用下标的方式来读取数据
for (vector<int>::size_type ix = 0;ix <vUserInfo.size();ix++)
{
strMessage.Format(_T("%s;%s;%d"),vUserInfo[ix].UserName,vUserInfo[ix].CNUserName,vUserInfo[ix].UserID);
MessageBox(strMessage);
}
//采用迭代器的方式循环
for (vector<UserInfo>::iterator it=vUserInfo.begin();it!=vUserInfo.end();it++)
{
strMessage.Format(_T("%s;%s;%d"),(*it).CNUserName,(*it).UserName,(*it).UserID);
MessageBox(strMessage);
}
}