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);
 }
}

 

posted on 2009-06-05 15:22  周伟  阅读(372)  评论(0编辑  收藏  举报

导航