vector >能行吗?

lotomer 2006-07-30 02:49:41
我想把ListView中的行分类存储,用vector<vector<TListItem> >行吗?
请各位指教。
我试了N次不成功,是不是vector不支持TListItem?有什么可以代替的吗?
...全文
270 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lotomer 2006-08-04
  • 打赏
  • 举报
回复
好的
谢谢各位啦
结帖咯
lotomer 2006-08-03
  • 打赏
  • 举报
回复
TO missdeer(思鹿):
我看自定义一个结构算了,应该效果也差不多,你说呢?我想LVITEM也就是一个结构嘛,对我来说是个陌生的结构,没用过:)

用自定义结构应该就可以 vec.push_back(MyStruct) 了吧
lotomer 2006-08-03
  • 打赏
  • 举报
回复
To 毛毛:
窗体里只有一个TListView;根据部门的变化TListView中的数据也会“重新装载”,以前保存的那些指针还有什么用呢?
Waiting4you 2006-08-03
  • 打赏
  • 举报
回复
那就new出所有的TListItem放在vector里,TListView要用的话把对应的TListItem->Assign过去
痞子酷 2006-08-03
  • 打赏
  • 举报
回复
"a.h":
__published:
TListView *lvFieldData;
private:
vector<TListView> vecLV;
"a.cpp":
//添加到vecLV
vec.push_back(*lvFieldData);
//从vecLV中取
TListView *lvTemp=&(vec.pop_back()); //编译不过

-----------------------------------------------
vector<TListView *> vecLV;
vecLV.push_back(lvTemp);//只要将指针push就可以啦。

for(unsigned int i=0; i<vecLV.size();i++)
{
TListView *lvTemp=vecLV[i];
}

lotomer 2006-08-02
  • 打赏
  • 举报
回复
对了
不用TListItem的话,有什么非VCL类可以代替他吗?
lotomer 2006-08-02
  • 打赏
  • 举报
回复
运行的时候才知道部门的个数和每个部门的人员信息,能静态申明为全局吗?
运行时创建的不是用完就会销毁的吗?
Waiting4you 2006-08-02
  • 打赏
  • 举报
回复
运行的时候才知道部门的个数和每个部门的人员信息,能静态申明为全局吗?
运行时创建的不是用完就会销毁的吗?
-----------------------------------
用vector存TListItem指针用完怎么会自动销毁?TListItem都放在TListView里,由TListView管理,vector只是保存指向TListItem的指针而已.关键是要做到TListView里的记录和vector里的同步
类库 2006-08-02
  • 打赏
  • 举报
回复
不用TListItem,就只能直接用API喽,大概像这个样子:

LVITEM lvItem;
int iNewIndex;

lvItem.mask = LVIF_TEXT;
lvItem.iItem = dwIndex;
lvItem.iSubItem = 0;
lvItem.pszText = AppName;
lvItem.cchTextMax = lstrlen(AppName)+1;
iNewIndex = ListView_InsertItem(hListView, &lvItem);

ListView_SetItemText(hListView, iNewIndex, 1, VerString);
ListView_SetItemText(hListView, iNewIndex, 2, LocString);
ListView_SetItemText(hListView, iNewIndex, 3, strTypeLibGuid);
ListView_SetItemText(hListView, iNewIndex, 4, PathName);

用ListView的Handle,这个演示了怎么插入一条记录
Waiting4you 2006-08-01
  • 打赏
  • 举报
回复
TListView *lvTemp=&(vec.pop_back());

vector的pop_back()返回值是void
你试试
TListView *lvTemp=&(vec.back());
vec.pop_back();

不过偶还是支持思鹿的观点,用vector<vector<TListItem *> >,首先VCL控件必须用new创建,其次你保存TListItem的话效率太低(构造,析构,拷贝全用上了)
类库 2006-08-01
  • 打赏
  • 举报
回复
不明白的是,既然马上就要销毁,干吗还要保存起来?
需求和行为矛盾喽
lotomer 2006-08-01
  • 打赏
  • 举报
回复
To missdeer(思鹿):
传递指针能行吗?创建的是临时TListItem,马上就会销毁的,指针非法拉吧
To ouygg(痞子酷):
vector<TlistView> 怎么用?
我这样用不行啊:
"a.h":
__published:
TListView *lvFieldData;
private:
vector<TListView> vecLV;
"a.cpp":
//添加到vecLV
vec.push_back(*lvFieldData);
//从vecLV中取
TListView *lvTemp=&(vec.pop_back()); //编译不过

痞子酷 2006-07-31
  • 打赏
  • 举报
回复
我想把ListView中的行分类存储,用vector<vector<TListItem> >行吗?
请各位指教。
我试了N次不成功,是不是vector不支持TListItem?有什么可以代替的吗?
-----------------------------------------------------
vector <TListView> 就可以啦。
类库 2006-07-30
  • 打赏
  • 举报
回复
试试vector<vector<TListItem *> >呢
VCL要求组件对象是在堆里创建,直接用TListItem不行

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧