【MFC】CStringArray类使用方法

01、目录

目录

      • 01、目录
      • 02、CStringArray概述
      • 03、CStringArray使用须知
      • 04、创建方法及成员函数讲解
          • 4.1 CStringArray::CStringArray
          • 4.2 CStringArray::Add
          • 4.3 CStringArray::Append
          • 4.4 CStringArray::Copy
          • 4.5 CStringArray::GetCount
          • 4.6 CStringArray::GetSize
          • 4.7 CStringArray::GetAt
          • 4.8 CStringArray::IsEmpty
          • 4.9 CStringArray::InsertAt
      • 05、小结

02、CStringArray概述

CStringArray类可以用来存储CString类型的对象,而且它的容量是可以动态增加的。

CStringArray是编译器定义的类型!可以进行一些(如:访问、增、删、改)等操作。

集中单个字符串的操作使用CString,集中一批字符串的管理使用CStringArray。

一个是动态,一个静态,CStringArray是动态的,数组长度可以动态改变, 内部一个是链表, 另一个可能是申请好的连续的内存块。

CStringArray的成员函数与类CObArray的成员函数相似。由于这种相似性,您可以使用CObArray参考文档来指定成员函数。无论您将CObject指针视为返回值,都要替换CString对象(而不是CString指针)。无论您将CObject指针作为函数参数,都要替换LPCTSTR。

CObject* CObArray::GetAt( int <nIndex> ) const;
//例如,翻译成
CString CStringArray::GetAt( int <nIndex> ) const;

//或者如下面

void SetAt( int <nIndex>, CObject* <newElement> )
//或者
void SetAt( int <nIndex>, LPCTSTR <newElement> )

03、CStringArray使用须知

  • 继承关系:
class CStringArray : public CObject
  • 包含头文件:
#include   //包含此头文件,即可使用CStringArray
  • 注意事项:

在使用数组之前,请使用SetSize来建立它的大小并为它分配内存。如果你不使用SetSize,将元素添加到数组中将使其经常被重新分配和复制。频繁的重新分配和复制效率低下,可以分割内存。

CStringArray合并REPLEY_SITY宏以支持其元素的序列化和转储。如果一个数组CString对象存储到存档中,可以使用重载的插入运算符,也可以使用Serialize成员函数,每个元素依次序列化。

如果需要转储数组中的单个字符串元素,则必须将转储上下文的深度设置为1或更高。

当CString数组被删除,或者当其元素被移除时,字符串内存将酌情释放。

04、创建方法及成员函数讲解

做了一张表给大家看,展示了所有函数,然后举例说几个常用的:

函数(Function) 描述(Description)
CStringArray::CStringArray 构造空数组。
CStringArray::Add 将一个元素添加到数组的末尾;如果需要,则扩展该数组。
CStringArray::Append 将另一个数组追加到数组中;如有必要,将扩展该数组。
CStringArray::Copy 将另一个数组复制到该数组;如有必要,则扩展该数组。
CStringArray::ElementAt 返回对数组中元素指针的临时引用。
CStringArray::FreeExtra 释放当前上限以上的所有未使用内存。
CStringArray::GetAt 返回给定索引处的值。
CStringArray::GetCount 获取此数组中的元素数。
CStringArray::GetData 允许访问数组中的元素。可以零.
CStringArray::GetSize 获取此数组中的元素数。
CStringArray::GetUpperBound R 返回最大有效索引。
CStringArray::InsertAt 在指定的索引处插入元素(或其他数组中的所有元素)。
CStringArray::IsEmpty 确定数组是否为空。
CStringArray::RemoveAll 从此数组中移除所有元素。
CStringArray::RemoveAt 移除特定索引处的元素。
CStringArray::SetAt 设置给定索引的值;数组不允许增长。
CStringArray::SetAtGrow 设置给定索引的值;必要时扩展数组。
CStringArray::SetSize 设置要包含在此数组中的元素数。

Public Operators

函数(Function) 描述(Description)
CStringArray::operator [ ] 在指定索引处设置或获取元素。

下面以官方的描述为例,CObArray类(父类)举例,子类用法同父类。

4.1 CStringArray::CStringArray

构造一个空的CStringArray类对象数组

CStringArray &strA = CStringArray();
//或者
CStringArray strA;  //这里请忽略重定义,我只是举例
4.2 CStringArray::Add

将一个元素添加到数组的末尾;如果需要,则扩展该数组。

//这里追加一串字符,然后我们去输出Ta
CStringArray strA;
strA.Add(_T("hello,Cain!")); //No Problem
strA.Add("hello,World!"); //error,这里要用宽字节类型
4.3 CStringArray::Append

将另一个数组追加到数组中;如有必要,将扩展该数组。

CStringArray strA,strB;
strA.Add(_TEXT("Cain Xcy:")); //No problem
strB.Add()T("人总是珍惜未得到的而遗忘了所拥有的!"));
//下面就是追加了
strA.Append(strB); //No problem
4.4 CStringArray::Copy

将另一个数组复制到该数组;如有必要,则扩展该数组。
这个同CStringArray::Append,基本效果一样的。

CStringArray strA,strB;
strA.Add(_TEXT("Cain Xcy:")); //No problem
strB.Add()T("我曾与神明签约,赌我不会后悔,可最后遗憾更甚!"));
//下面就是追加了
strA.Copy(strB); //No problem

这全是添加,咋整出来看看啊,到底对不对
好的,下面就来了,打印之前要设计到对CStringArray的大小(容量)函数。

4.5 CStringArray::GetCount

获取此数组中的元素数。

CStringArray strA,strB;
strA.Add(_T("Cain Xcy:"));
strB.Add(_T("我也曾相信所有的落叶都能归根,亦信汝是我的根,可谁曾料想,最后的我们,两两相望,也仅剩下失望!"));

strA.Append(strB);
CString str;  //临时容器
//下面是打印上面两个CStringArray的函数,好好看.
for(int i = 0; i < strA.GetCount(); i++)
{
	str += strA[i]; //将所有值一个一个添加到临时容器中
}

AfxMessageBox(str); //打印在弹框中
4.6 CStringArray::GetSize

获取此数组中的元素数。
此成员函数用法同上,效果也一样。

CStringArray strA,strB;
strA.Add(_T("Cain Xcy:"));
strB.Add(_T("若不是厌倦了红尘,又怎会入编程的海洋,求一抹安宁。"));

strA.Append(strB);
CString str;

for(int i = 0; i < strA.GetSize(); i++)
{
	str += str[i];
}

AfxMessageBox(str,MB_ICONINFORMATION); //构建一个信息输入框输出

4.7 CStringArray::GetAt

返回给定索引处的值。
举例给大家看看就知道这是什么意思了。

CStringArray strA;
strA.Add(_T("Cain"));
strA.Add(_T("Beck"));
strA.Add(_T("Tom"));

CString str1,str2;
str1.Format(_T("%d"),strA.GetSize());
AfxMessageBox(str1,MB_ICONINFORMATION); //这是3

//看了上面的输出,应该懂了吧,没错,GetAt()的参数就是这个索引值
str2 = GetAt(9); //同样的,也是从0开始
AfxMessageBox(str2); //Cain
4.8 CStringArray::IsEmpty

确定数组是否为空。

CStringArray strA,strB;

strA.Add(_T("故事很短,余生很长!"));
if(strA.IsEmpty())
{//程序不走这里
	AfxMessageBox("数组为NULL!");
}
else
{//程序当然是走到这里了
	AfxMessageBox("数组不为NULL!");
}

//我们再看strB
if(strB.IsEmpty())
{//程序当然是走到这里了
	AfxMessageBox("数组为NULL!");
}
else
{//
	AfxMessageBox("数组不为NULL!");
}
4.9 CStringArray::InsertAt

在指定的索引处插入元素(或其他数组中的所有元素)。

CStringArray strA;
strA.Add(_T("Cain")); //索引为0
strA.Add(_T("Beck")); //索引为1

//现在在索引为1的地方插入一个Sweet
strA.InsertAt(1,_T("Sweet")); //第三个参数默认为1,不用管

CString str;
str = strA.GetAt(1);
AfxMessageBox(str,MB_ICONINFORMATION); //打印Sweet

05、小结

上面的是用得比较多的,其他的一般来说用不上,因为这个类,平时我们用,这几个方法已经足够了。
如果想了解更多,可以去看微软的官方文档,但是官方文档是CObArray类的方法。链接如下:
https://docs.microsoft.com/en-us/cpp/mfc/reference/cobarray-class?view=vs-2019#getat

版权声明:转载请注明出处,谢谢!

你可能感兴趣的:(MFC,MFC)