社区
C++ 语言
帖子详情
怎样对QVector进行添加和删除操作
岁小草
2012-05-22 04:55:18
我定义了一个QVector,里边存放的是结构体。我在用erase进行删除一个结构体时,达不到想要的效果。比如,容器中存的是1,2,3,4,5. 我删除了2之后,就变为了1,3,4,4,5. 而我想要的结果是1,3,4,5.
我在进行添加操作的时候,使用push_back,为什么每次插入的不是最后一个位置。
纠结啊。。。在线等。。。
...全文
2703
11
打赏
收藏
怎样对QVector进行添加和删除操作
我定义了一个QVector,里边存放的是结构体。我在用erase进行删除一个结构体时,达不到想要的效果。比如,容器中存的是1,2,3,4,5. 我删除了2之后,就变为了1,3,4,4,5. 而我想要的结果是1,3,4,5. 我在进行添加操作的时候,使用push_back,为什么每次插入的不是最后一个位置。 纠结啊。。。在线等。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
岁小草
2012-05-23
打赏
举报
回复
谢谢各位,问题解决了,代码没问题。之所以结构体会重复出现,是我将vector往文件中写的时候未将原来文件内容清空造成重复。算是长了记性长了知识了,纠结我好几天。。。。。。
nanjun520
2012-05-23
打赏
举报
回复
我用 QVector<QString> stringVector; 测试了一下 没什么问题啊!
void qtTestCheckSum::delQvector(QString deldata)
{
for (int i = 0; i < stringVector.size(); i++)
{
if(stringVector[i] == deldata)//进行路径匹配
{
stringVector.erase(stringVector.begin()+i);//删除该行
//stringVector.resize(stringVector.size()-1);//设置大小
}
}
}
我 跟踪 调试了一下 能正常删除啊!
hzy694358
2012-05-23
打赏
举报
回复
QVector 这个是啥东东没用过
如果是跟vector一样功能的话,估计就是如下:
for (QVector<START_PROJECT_SET>::iterator iter = projectss.begin();iter != projectss.end();)
{
if(iter->sProjectPath == sProPath)//进行路径匹配
{
projectss.erase(iter);//删除该行
}
else
{
iter++;
}
}
岁小草
2012-05-23
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
把 I<projectss.size()改成i!=projectss.size()
如果SproPath太长的话也许不会进行完全的比对
projectss.size()-1不会改变projectss的大小,
第二次删除的时候会重复设置同一个值
[/Quote]我现在的问题是:erase可以删除,但是删除之后的容器大小不变,所以总有一个结构体是重复的,又找到重复的规律,很没辙。。。
岁小草
2012-05-23
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
迭代器删除的问题
[/Quote]能否讲清楚一点?你是说我应该用迭代器遍历而不是下标吗?
youkuxiaobin
2012-05-22
打赏
举报
回复
迭代器删除的问题
miliggate
2012-05-22
打赏
举报
回复
还有你赋值给vector容器的时候的代码贴出来,也许是赋值的问题
miliggate
2012-05-22
打赏
举报
回复
把 I<projectss.size()改成i!=projectss.size()
如果SproPath太长的话也许不会进行完全的比对
projectss.size()-1不会改变projectss的大小,
第二次删除的时候会重复设置同一个值
岁小草
2012-05-22
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
把代码贴出来好吗。。
[/Quote]嗯嗯。
MainWindow.h:
//结构体
typedef struct StartProjectSet
{
bool bSetActive;
QString sProjectName;
QString sProjectPath;
QString sProVersion;
QString sProDescribe;
int nWidth;
int nHeight;
}START_PROJECT_SET;
//vector容器,存放结构体
static QVector<START_PROJECT_SET> projectss;
MainWindow.cpp:
//从容器中删除某个结构体
void MainWindow::dltStructFromVector(QString sProPath)
{
for (int i = 0; i < projectss.size(); i++)
{
if(projectss[i].sProjectPath == sProPath)//进行路径匹配
{
projectss.erase(projectss.begin()+i);//删除该行
projectss.resize(projectss.size()-1);//设置大小
}
}
}
whayxh
2012-05-22
打赏
举报
回复
把代码贴出来好吗。。
QVect
or频繁插入
操作
会有什么结果
QList对于插入
操作
的开销较小,因为它使用了链表数据结构,在插入元素时只需要调整指针,而不需要
进行
数据复制和内存分配。频繁的插入
操作
可能导致大量的数据复制,特别是在向已经存满的
QVect
or 中插入元素时。最佳...
Qt入门教程:
QVect
or指针的循环
删除
浅析
然而,在使用
QVect
or时,特别是当容器中存储的是指针类型时,我们需要小心处理
删除
操作
,以避免内存泄漏和悬挂指针等问题。在实际的Qt项目中,当需要使用
QVect
or存储指针类型数据时,请始终记得正确地
删除
指针,以...
QList 和
QVect
or 的区别,和使用注意事项
QList 和
QVect
or 来自Qt官方文档和Effective Qt QList<T>、QLinkedList<T>和
QVect
or<T>提供了类似的API和功能。它们通常是可互换的,但会对性能产生影响。
QVect
or应该是默认的第一选择。 ...
遍历
qvect
or_转:Qt 之
QVect
or
QVect
or类是一个提供动态数组的模板类。
QVect
or是Qt普通容器类的一种。它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们...像prepend()和insert()这样的
操作
通常比
QVect
or要快些,这是由于QL...
使用QList还是
QVect
or的问题
如果更在意更新数据(
添加
、
删除
等)的速度则用QList(对应
操作
是[]=值),但是因为QChart主要用的是QList访问数据(对应
操作
是at()),也是导致大数据量卡顿的原因之一,一直被诟病。- 貌似Qt6对这两个类合并了...
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章