Codejie's C++ Space

Using C++

问题:如何通过下标连续删除vector中的元素

使用下标方式访问vector中的元素非常方便,但如果只是知道要删除元素所在vector中的下标值,如何删除这些元素呢?
    这个问题我觉得狠简单,并未多想,但实际写到用的时候,发现很烦~

    例如: std::vector vct; vct.push_back(0); vct.push_back(1); vct.push_back(2); 通过下标访问方式,可以获得下标是0的元素值为0;如果要删除值为0的元素,可以使用vct.erase(vct.begin())。现在,要删除下标为1的元素,该如何删除呢?
    当然简单遍历方式是可以的,只是代码写起来比较难看,难免不了循环和break。
    不知各位有啥方法吗?

posted on 2009-10-20 20:15 codejie 阅读(2706) 评论(9)  编辑 收藏 引用 所属分类: C++随笔而已

评论

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-20 22:15 OwnWaterloo

晕……
v.erase(v.begin()+1);

  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-21 08:54 codejie

vct.begin() + 1....还真不知道iterater可以+1...  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-21 09:10 codejie

Data::TBoxVector::iterator it = m_vct.begin() + start;

size_t count = 0;
while(it != m_vct.end() && count < size)
{
m_vct.erase(it);
it = m_vct.begin() + start;
++ count;
}

我一直以为对于STL容器的iterator只能使用++和--,而不能类似指针一样进行指定跨度访问。
总是被习惯所骗,感觉自己很土~
谢谢OwnWaterloo一语惊醒梦中人~  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-21 13:12 OwnWaterloo

@codejie
STL有输入、输出、前向、双向、随机,5种迭代器。
erase有范围删除:
first = v.begin()+start;
v.erase( first, first+min(size,v.size()-start) );

  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-21 15:43 codejie

@OwnWaterloo
收到,谢谢。  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素[未登录] 2009-10-22 01:47 Liu

每天学习!  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-10-22 10:31 codejie

@Liu
嗯,每天学习!
这个iterator的问题应该是咱们当年‘STL的容器可以相互替换’概念导致的,为了保证访问容器的方法跟容器本身无关,都使用统一的iterator操作,实际忘记了STL容器还分顺序容器和随机容器,而它们之间的iterator有着各自的特性的...  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-11-10 23:06 白云深

来不及细看了,正在编译ORTP头痛死了...。不过STL容器的元素删除要很小心,有很多微妙的地方要注意,以前看Cpp reference wiki上的示例代码的时候总觉得怎么那么啰嗦,等后来自己犯错误了才知道,必须要那么去做。  回复  更多评论   

# re: 问题:如何通过下标连续删除vector中的元素 2009-11-11 09:38 codejie

@白云深
ORTP么用过,记得那时做IM程序时,用的好像是JRTP、JVOIP一套~很久没有接触RTP东东了~  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


公告

Using C++

导航

统计

留言簿(73)

随笔分类(513)

积分与排名

最新评论

阅读排行榜

评论排行榜