说明
本人原先是做Qt的,但现在找的工作却是MFC的,所以Qt有但MFC没有的就自己写出来就可以了,参照Qt的QStringList,考虑到VS下已经有了CStringList,但与QStringList差异太大,用起来不习惯,所以定义类名为CListString.
程序
//CListString.h
#pragma once
#include <cstring>
#include <list>
using namespace std;
class CListString
{
public: CListString(); //不做任何的处理
CString at(unsigned int i); //返回第i个参数
void clear();
CListString & operator<<(const string &str); //兼容string
CListString & operator<<(const CString &str); //兼容CString
CListString & operator<<(const int &number); //兼容int
CListString & operator<<(const unsigned int &number); //兼容 uisigned int
CListString & operator<<(const long &number); //兼容 long int
CListString & operator<<(const long long &number); //兼容 long long int
CListString & operator<<(const float &number); //兼容float
CListString & operator<<(const double &number); //兼容double
CListString & operator<<(const long double &number); //兼容long double
CListString & operator<<( const char &number); //兼容char,一个字符,以字符形式输出
private:
list<CString> mylist; //存储数据的链表
};
//CListString.cpp
#include "pch.h"
#include "CListString.h"
CListString::CListString()
{
mylist.clear(); //初始化时清空字符串链表
}
CString CListString::at(unsigned int i)
{
if (mylist.size() > i)
return { }; //i的值出现错误
list<CString>::iterator it = mylist.begin();
for (unsigned int j = 0; j < i; j++)
{
it++;
}
return *it;
}
void CListString::clear()
{
mylist.clear();
}
CListString & CListString::operator<<( const string & str)
{
// TODO: 在此处插入 return 语句
mylist.push_back(CString(str.c_str()));
return *this;
}
CListString & CListString::operator<<(const CString & str)
{
// TODO: 在此处插入 return 语句
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const int & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%d"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const unsigned int & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%u"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const long & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%ld"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const long long & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%lld"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const float & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%f"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const double & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%lf"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const long double & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%lf"), number);
mylist.push_back(str);
return *this;
}
CListString & CListString::operator<<(const char & number)
{
// TODO: 在此处插入 return 语句
CString str;
str.Format(_T("%c"), number);
mylist.push_back(str);
return *this;
}
最后
目前只添加了一些自己常用的函数,至于如何修改对应位置或者删除对应位置的字符串的参数可自行进行修改操作。