(原創) 如何删除std::vector内的element?(使用find) (C/C++) (STL)
2006-11-15 15:26
676 查看
若要删除std::vector中的element,正规的方式该用find() generic algorithm,若find()找到了,会传回该iterator,若找不到,将传回vector.end()。这种写法远比用for loop干净很多。
1#include <iostream>
10#include <vector>
11#include <algorithm>
12
13int main() const int iaSize = 11;
15 int ia[] =
17 std::vector<int> ivec;
18 ivec.insert(ivec.end(), ia, ia + iaSize);
19
20 // Compile OK, but run-time error!!
21 // for(std::vector<int>::iterator iter = ivec.begin();
22 // iter != ivec.end(); ++iter) {
23 // if (*iter == 8) {
24 // ivec.erase(iter);
25 // }
26 // }
27
28 // This is a RIGHT way to do it.
29 std::vector<int>::iterator iter = find(ivec.begin(), ivec.end(), 8);
30 if (iter != ivec.end()) ivec.erase(iter);
32 }
33
34 // cout the result
35 for(std::vector<int>::const_iterator iter = ivec.begin();
36 iter != ivec.end(); ++iter)
38 std::cout << *iter << std::endl;
39 }
40
41 return 0;
42}
See Also
(原創) 何删除std::vector内的element?(使用for loop) (C/C++) (STL)
Reference
C++ Primer 4th P.327
1#include <iostream>
10#include <vector>
11#include <algorithm>
12
13int main() const int iaSize = 11;
15 int ia[] =
17 std::vector<int> ivec;
18 ivec.insert(ivec.end(), ia, ia + iaSize);
19
20 // Compile OK, but run-time error!!
21 // for(std::vector<int>::iterator iter = ivec.begin();
22 // iter != ivec.end(); ++iter) {
23 // if (*iter == 8) {
24 // ivec.erase(iter);
25 // }
26 // }
27
28 // This is a RIGHT way to do it.
29 std::vector<int>::iterator iter = find(ivec.begin(), ivec.end(), 8);
30 if (iter != ivec.end()) ivec.erase(iter);
32 }
33
34 // cout the result
35 for(std::vector<int>::const_iterator iter = ivec.begin();
36 iter != ivec.end(); ++iter)
38 std::cout << *iter << std::endl;
39 }
40
41 return 0;
42}
See Also
(原創) 何删除std::vector内的element?(使用for loop) (C/C++) (STL)
Reference
C++ Primer 4th P.327
相关文章推荐
- (原創) 如何将array转成std::vector? (使用constructor) (C/C++) (STL)
- (原創) 如何将array转成std::vector? (使用vector.insert) (C/C++) (STL)
- 如何删除std::vector内的element?(使用for loop) (中级)
- (原創) 如何使用find_first_of() algorithm? (C/C++) (STL)
- (原創) 如何使用subscripting的方式新增std::map? (C/C++) (STL)
- (原創) 使用std::vector模拟std::stack? (C/C++) (STL)
- (原創) 如何使用find() algorithm? (C/C++) (STL)
- 【C++ STL应用与实现】2: 如何使用std::vector
- stl vector/list如何一边遍历一边删除
- STL算法使用之std::find,std::find_i
- FAQ14: STL中vector容器如何间隔删除元素?
- STL中Vector容器Find的使用(int查找)
- (原創) 如何将字符串前后的空白去除? (使用string.find_first_not_of, string.find_last_not_of) (C/C++)
- (原創) 如何使用for_each() algorithm? (C/C++) (STL)
- 【C++ STL应用与实现】13: 如何使用std::queue和std::priority_queue
- stl 中list 或者vector正确使用find查找类对象
- (原創) 如何使用C++的標準函式庫進行排序? (C/C++) (STL)
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- (原創) 如何正確的使用迴圈(使用for_each)? (C/C++) (STL) (template)