100分请教CStringArray的用法 我的数据库中有个用户信息(共有8列)原来是用二维数组从数据库中接收这些数据,因为用户的多少是变动的,我就只好估计最大为100个,写成CString strSoftExpertsList[100][8];现在想改用CStringArray动态接收这些数据,但我不知如何用它存储二维数组,请详细告知CStringArray的用法。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用CStringArray好像是没有办法做成二维数组了。CStringArray只是一维数组。可以考虑用这样的数组:typedef CArray<CStringArray,CStringArray> CString2Array;这样,CString2Array的每个元素代表一个CStringArray,就可以到达二维的效果了。 楼主的CString数组中第二维固定是8,只是第一维是变化的。这在一个SQL数据库是常见的,一般数据的列数都是固定的,只是行数随着SELECT查询语句的不同而变化,应该有更简便而通用的方法。 happyparrot(快乐鹦鹉) 的方法太繁琐了! 那么这样:typedef CArray<CString*,CString*> CStrPArray;CStrPArray arStrP;CString *pStr = new CString[8];pStr[0] = "***";.....pStr[7] = "...";arStrP.Add(pStr); 就用CStringArray<CStringArray<>> 构建二维数组好了或用vector<vector<> > 如果列数固定,就干脆把一行做成一个struct,然后放到数组中CStringArray<Mystruct&,Mystruct&> happyparrot(快乐鹦鹉)的方法不错。 happyparrot(快乐鹦鹉)的方法用了new,在哪里delete呢? oyljerry(【勇敢的心】说的CStringArray<Mystruct&,Mystruct&>,能够再将详细点吗?因为我只是个初学者。 CArray<CStringArray,CStringArray> CString2Array;不灵的,必须有拷贝构造函数 还有请问appyparrot(快乐鹦鹉),如果我想调用第二行的第5个字段是用:arStrP[2][5]吗? happyparrot(快乐鹦鹉)的方法用了new,在哪里delete呢?==在arStrP数组不再使用的时候delete啊。循环从arStrP中得到每一个CString*,然后delete[]就可以了。 goodboyws(深夜不眠者)如果遇到从数据库SELECT数据,是采用什么简便的方法存储的呢?也就是行数变化,列数(字段)固定的数据,应该是很普遍的呀? 请问happyparrot(快乐鹦鹉) 具体讲讲如何循环得到每一行的各个字段? 还有请问appyparrot(快乐鹦鹉),如果我想调用第二行的第5个字段是用:arStrP[2][5]吗?如果是从0开始,那么是这样。 用 向量容器呀。vector 看看这段代码:CMapWordToPtr m_map;//word 对应行,Ptr对应你要的CStringArray指针 //一个CStringArray对象保存一行记录(你的一行是八段,其实可以 //任意,因为CStringArray.Add()可以将每个字段值加入)///////////////////////////////////////////////////////////////////////////Write//////////////CStringArray* pStringArray = new CStringArray;ASSERT(pStringArray != NULL);for(int i=0;i</*行数*/;i++){for(int j=0;j</*字段数*/;j++){ ....................//////// ....................//取值// ....................//////// pStringArray->Add(/* 值的字串形式*/);}m_map.SetAt(i,pStringArray);}..............////////////////////////////////////////////////////////////ReadCStringArray* p=NULL;m_map.GetAt(/*行位置*/,(void*&)p);CString strValue;strValue = p->GetAt(/*字段位置*/);//////////////////////////// 从性能考虑,用CStringArray最好先SetSize()一个大概的容量。CString str;CStringArray strarray;strarray.SetSize(100);str = "SQL";strarray.SetAt(0, str); 每个用户8列,可以作为一个struct 可以考虑创建8个CCStringArray 然后让他们的index保持一致就可以了 MFC生存期的问题 数字图片识别 大家帮忙啊! 使用GetPixel函数的问题?郁闷,各位大虾帮帮忙 关于打印预览的问题 如何删除ocx控件 问一个位图显示的问题? 各位,我想在ATL的组件方法中传整形参数,怎么能传出值?! hello 如何判断窗口对象是否存在 怎样察看VC6.0生成的汇编代码? 如何把CListCtrl转换成一个ActiveX控件?高分谢人
可以考虑用这样的数组:typedef CArray<CStringArray,CStringArray> CString2Array;
这样,CString2Array的每个元素代表一个CStringArray,就可以到达二维的效果了。
这在一个SQL数据库是常见的,一般数据的列数都是固定的,只是行数随着SELECT查询语句的不同而变化,应该有更简便而通用的方法。
happyparrot(快乐鹦鹉) 的方法太繁琐了!
typedef CArray<CString*,CString*> CStrPArray;
CStrPArray arStrP;
CString *pStr = new CString[8];
pStr[0] = "***";
.....
pStr[7] = "...";
arStrP.Add(pStr);
或用vector<vector<> >
CStringArray<Mystruct&,Mystruct&>
oyljerry(【勇敢的心】说的CStringArray<Mystruct&,Mystruct&>,能够再将详细点吗?因为我只是个初学者。
==在arStrP数组不再使用的时候delete啊。循环从arStrP中得到每一个CString*,然后delete[]就可以了。
如果是从0开始,那么是这样。
CMapWordToPtr m_map;//word 对应行,Ptr对应你要的CStringArray指针
//一个CStringArray对象保存一行记录(你的一行是八段,其实可以
//任意,因为CStringArray.Add()可以将每个字段值加入)/////////////////////////////////////////////////////////////////////////
//Write//////////////
CStringArray* pStringArray = new CStringArray;
ASSERT(pStringArray != NULL);
for(int i=0;i</*行数*/;i++)
{
for(int j=0;j</*字段数*/;j++)
{
....................////////
....................//取值//
....................////////
pStringArray->Add(/* 值的字串形式*/);
}m_map.SetAt(i,pStringArray);
}
..............
//////////////////////////////////////////////////////////
//Read
CStringArray* p=NULL;
m_map.GetAt(/*行位置*/,(void*&)p);
CString strValue;
strValue = p->GetAt(/*字段位置*/);
////////////////////////////
CString str;
CStringArray strarray;
strarray.SetSize(100);str = "SQL";
strarray.SetAt(0, str);
然后让他们的index保持一致就可以了