怎样对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 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
把代码贴出来好吗。。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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