欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vector的使用

程序员文章站 2024-01-14 09:07:22
...

本文以MFC程序读取txt文件中的字符串为例,介绍4种Vector的使用方法
一、单个1维Vector向量的使用(向量的类型为变量)
在.h中的定义如下

 void getMultistr(CString Sstr, vector<CString>& Multistr);

在.cpp中的函数如下

void CReadCStringDlg::OnBnClickedButtonReadCstring()
{
 CStdioFile InputFile;
 CString InputFilter;
 CString InputFilePath;
 CString str;
 vector<CString> Mstr;
 // 1、读取样本数据
 InputFilter = _T("Data Files(*.txt)|*.txt||");
 CFileDialog MyDialog(TRUE, 0, 0, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, InputFilter);
 if (IDOK == MyDialog.DoModal())
 {
  // 打开文件,逐行读取数据
  InputFilePath = MyDialog.GetPathName();
  InputFile.Open(InputFilePath, CFile::modeReadWrite);
  InputFile.ReadString(str);
  getMultistr(str, Mstr);
  Mstr.erase(Mstr.begin(), Mstr.end()); //删除所有元素
//  Mstr.pop_back();//删除最后一个元素
//  vector<CString>::iterator k = Mstr.begin();
//  Mstr.erase(k);   //删除第1个元素
  InputFile.ReadString(str);
  getMultistr(str, Mstr);
  InputFile.Close();
 }
}
void CReadCStringDlg::getMultistr(CString Sstr, vector<CString>& Multistr)
{
 CString temp;
 int pos;
 int length;
 while (1)
 {
  pos = Sstr.Find(_T(" "));
  if (-1 != pos)
  {
   length = Sstr.GetLength();
   temp = Sstr.Left(pos);
   Multistr.push_back(temp);
   Sstr = Sstr.Right(length - pos - 1);
  }
  else
  {
   Multistr.push_back(Sstr);
   return;
  }
 }
}

注意:向量的形参是通过地址接收的。地址接收的意义在于形参上的向量发生改变之后,实参上的向量也会对应的发生改变。若不加&符号,形参上的向量数据发生改变之后,实参上的数据不会发生变化。

二、1维Vector向量数组的使用(向量的类型为变量)
在.h中的定义

 void getMultistr(CString Sstr, vector<CString>& Multistr);

在.cpp的函数如下

void CReadCStringDlg::OnBnClickedButtonReadCstring()
{
 CStdioFile InputFile;
 CString InputFilter;
 CString InputFilePath;
 CString str;
 vector<CString>* Mstr;
 // 1、读取样本数据
 InputFilter = _T("Data Files(*.txt)|*.txt||");
 CFileDialog MyDialog(TRUE, 0, 0, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, InputFilter);
 if (IDOK == MyDialog.DoModal())
 {
  // 打开文件,逐行读取数据
  InputFilePath = MyDialog.GetPathName();
  InputFile.Open(InputFilePath, CFile::modeReadWrite);
  Mstr = new vector<CString>[2];	//定义向量数组的大小
  InputFile.ReadString(str);
  getMultistr(str, Mstr[0]);
//  Mstr.erase(Mstr.begin(), Mstr.end()); //删除所有元素
//  Mstr.pop_back();//删除最后一个元素
//  vector<CString>::iterator k = Mstr.begin();
//  Mstr.erase(k);   //删除第1个元素
  InputFile.ReadString(str);
  getMultistr(str, Mstr[1]);
  InputFile.Close();
 }
}
void CReadCStringDlg::getMultistr(CString Sstr, vector<CString>& Multistr)
{
 CString temp;
 int pos;
 int length;
 while (1)
 {
  pos = Sstr.Find(_T(" "));
  if (-1 != pos)
  {
   length = Sstr.GetLength();
   temp = Sstr.Left(pos);
   Multistr.push_back(temp);
   Sstr = Sstr.Right(length - pos - 1);
  }
  else
  {
   Multistr.push_back(Sstr);
   return;
  }
 }
}

注意:向量的形参是通过地址接收的。地址接收的意义在于形参上的向量发生改变之后,实参上的向量也会对应的发生改变。若不加&符号,形参上的向量数据发生改变之后,实参上的数据不会发生变化。

三、单个1维Vector向量的使用(向量类型为指针)
在.h中的定义如下

 void getMultistr(CString Sstr, vector<CString*>& Multistr);

在.cpp中的函数如下

void CReadCStringDlg::OnBnClickedButtonReadCstring()
{
 CStdioFile InputFile;
 CString InputFilter;
 CString InputFilePath;
 CString str;
 vector<CString*> Mstr;
 // 1、读取样本数据
 InputFilter = _T("Data Files(*.txt)|*.txt||");
 CFileDialog MyDialog(TRUE, 0, 0, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, InputFilter);
 if (IDOK == MyDialog.DoModal())
 {
  // 打开文件,逐行读取数据
  InputFilePath = MyDialog.GetPathName();
  InputFile.Open(InputFilePath, CFile::modeReadWrite);
  InputFile.ReadString(str);
  getMultistr(str, Mstr);
//  Mstr.erase(Mstr.begin(), Mstr.end()); //删除所有元素
//  Mstr.pop_back();//删除最后一个元素
//  vector<CString>::iterator k = Mstr.begin();
//  Mstr.erase(k);   //删除第1个元素
  InputFile.ReadString(str);
  getMultistr(str, Mstr);
  InputFile.Close();
 }
}
void CReadCStringDlg::getMultistr(CString Sstr, vector<CString*>& Multistr)
{
 CString temp;
 int pos;
 int length;
 while (1)
 {
  pos = Sstr.Find(_T(" "));
  if (-1 != pos)
  {
   length = Sstr.GetLength();
   temp = Sstr.Left(pos);
   Multistr.push_back(new CString(temp));
   Sstr = Sstr.Right(length - pos - 1);
  }
  else
  {
   Multistr.push_back(new CString(Sstr));
   return;
  }
 }
}

注意:
1.向量的形参是通过地址接收的。地址接收的意义在于形参上的向量发生改变之后,实参上的向量也会对应的发生改变。若不加&符号,形参上的向量数据发生改变之后,实参上的数据不会发生变化。
2.   因为形参向量 Multistr是通过指针传递进来的,故在使用时Multistr.push_back(new CString(Sstr));需要进行分配内存。

四、1维Vector向量数组的使用(向量的类型为指针)
在.h中的定义如下

 void getMultistr(CString Sstr, vector<CString*>& Multistr);

在.cpp中的函数如下

void CReadCStringDlg::OnBnClickedButtonReadCstring()
{
 CStdioFile InputFile;
 CString InputFilter;
 CString InputFilePath;
 CString str;
 vector<CString*>* Mstr;
 // 1、读取样本数据
 InputFilter = _T("Data Files(*.txt)|*.txt||");
 CFileDialog MyDialog(TRUE, 0, 0, OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY, InputFilter);
 if (IDOK == MyDialog.DoModal())
 {
  // 打开文件,逐行读取数据
  InputFilePath = MyDialog.GetPathName();
  InputFile.Open(InputFilePath, CFile::modeReadWrite);
  Mstr = new vector<CString*>[2];
  InputFile.ReadString(str);
  getMultistr(str, Mstr[0]);
//  Mstr.erase(Mstr.begin(), Mstr.end()); //删除所有元素
//  Mstr.pop_back();//删除最后一个元素
//  vector<CString>::iterator k = Mstr.begin();
//  Mstr.erase(k);   //删除第1个元素
  InputFile.ReadString(str);
  getMultistr(str, Mstr[1]);
  InputFile.Close();
 }
}
void CReadCStringDlg::getMultistr(CString Sstr, vector<CString*>& Multistr)
{
 CString temp;
 int pos;
 int length;
 while (1)
 {
  pos = Sstr.Find(_T(" "));
  if (-1 != pos)
  {
   length = Sstr.GetLength();
   temp = Sstr.Left(pos);
   Multistr.push_back(new CString(temp));
   Sstr = Sstr.Right(length - pos - 1);
  }
  else
  {
   Multistr.push_back(new CString(Sstr));
   return;
  }
 }
}

注意:
1.向量的形参是通过地址接收的。地址接收的意义在于形参上的向量发生改变之后,实参上的向量也会对应的发生改变。若不加&符号,形参上的向量数据发生改变之后,实参上的数据不会发生变化。
2. 因为形参向量 Multistr是通过指针传递进来的,故在使用时Multistr.push_back(new CString(Sstr));需要进行分配内存。

相关标签: 常用方法