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> )
class CStringArray : public CObject
#include //包含此头文件,即可使用CStringArray
在使用数组之前,请使用SetSize来建立它的大小并为它分配内存。如果你不使用SetSize,将元素添加到数组中将使其经常被重新分配和复制。频繁的重新分配和复制效率低下,可以分割内存。
CStringArray合并REPLEY_SITY宏以支持其元素的序列化和转储。如果一个数组CString对象存储到存档中,可以使用重载的插入运算符,也可以使用Serialize成员函数,每个元素依次序列化。
如果需要转储数组中的单个字符串元素,则必须将转储上下文的深度设置为1或更高。
当CString数组被删除,或者当其元素被移除时,字符串内存将酌情释放。
做了一张表给大家看,展示了所有函数,然后举例说几个常用的:
函数(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类(父类)举例,子类用法同父类。
构造一个空的CStringArray类对象数组
CStringArray &strA = CStringArray();
//或者
CStringArray strA; //这里请忽略重定义,我只是举例
将一个元素添加到数组的末尾;如果需要,则扩展该数组。
//这里追加一串字符,然后我们去输出Ta
CStringArray strA;
strA.Add(_T("hello,Cain!")); //No Problem
strA.Add("hello,World!"); //error,这里要用宽字节类型
将另一个数组追加到数组中;如有必要,将扩展该数组。
CStringArray strA,strB;
strA.Add(_TEXT("Cain Xcy:")); //No problem
strB.Add()T("人总是珍惜未得到的而遗忘了所拥有的!"));
//下面就是追加了
strA.Append(strB); //No problem
将另一个数组复制到该数组;如有必要,则扩展该数组。
这个同CStringArray::Append,基本效果一样的。
CStringArray strA,strB;
strA.Add(_TEXT("Cain Xcy:")); //No problem
strB.Add()T("我曾与神明签约,赌我不会后悔,可最后遗憾更甚!"));
//下面就是追加了
strA.Copy(strB); //No problem
这全是添加,咋整出来看看啊,到底对不对
好的,下面就来了,打印之前要设计到对CStringArray的大小(容量)函数。
获取此数组中的元素数。
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); //打印在弹框中
获取此数组中的元素数。
此成员函数用法同上,效果也一样。
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); //构建一个信息输入框输出
返回给定索引处的值。
举例给大家看看就知道这是什么意思了。
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
确定数组是否为空。
CStringArray strA,strB;
strA.Add(_T("故事很短,余生很长!"));
if(strA.IsEmpty())
{//程序不走这里
AfxMessageBox("数组为NULL!");
}
else
{//程序当然是走到这里了
AfxMessageBox("数组不为NULL!");
}
//我们再看strB
if(strB.IsEmpty())
{//程序当然是走到这里了
AfxMessageBox("数组为NULL!");
}
else
{//
AfxMessageBox("数组不为NULL!");
}
在指定的索引处插入元素(或其他数组中的所有元素)。
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
上面的是用得比较多的,其他的一般来说用不上,因为这个类,平时我们用,这几个方法已经足够了。
如果想了解更多,可以去看微软的官方文档,但是官方文档是CObArray类的方法。链接如下:
https://docs.microsoft.com/en-us/cpp/mfc/reference/cobarray-class?view=vs-2019#getat
版权声明:转载请注明出处,谢谢!