-
/*
-
* vector_test.cpp
-
*
-
* Created on: 2015-3-22
-
* Author: gino
-
*/
-
-
-
-
-
#include <iostream>
-
#include <vector>
-
#include <algorithm>
-
using
namespace
std;
-
-
-
void printElem(int num){
-
-
cout << num <<
" ";
-
}
-
-
class myclass{
-
public:
-
void operator()(int i){
-
cout << i <<
" " ;
-
}
-
-
};
-
int main(){
-
vector<
int> v1;
-
myclass myobject;
-
//append
-
v1.push_back(
12);
-
v1.push_back(
16);
-
v1.push_back(
18);
-
-
cout << v1[
2] <<
endl;
-
cout << *(v1.begin() +
1) <<
endl;
-
-
v1[
0] +=
23;
-
cout << v1[
0] <<
endl;
-
-
cout <<
"v1.capacity : " << v1.capacity() <<
endl;
-
cout << v1.size() <<
endl;
-
-
//invalid iterator
-
vector<
int>::iterator it = v1.begin();
-
cout << *it <<
endl;
-
-
v1.push_back(
99);
-
v1.push_back(
108);
-
-
cout << *it <<
endl;
//危险
-
-
//insert
-
v1.insert(v1.begin()+
2,
123);
-
//for_each
-
for_each(v1.begin(),v1.end(),printElem);
-
cout <<
endl;
-
for_each(v1.begin(),v1.end(),myclass());
-
cout <<
endl;
-
for_each(v1.begin(),v1.end(),myobject);
-
cout <<
endl;
-
for_each(v1.begin(),v1.end(),[](
int value){
cout << value <<
" ";});
-
cout <<
endl;
-
v1.erase(v1.end()
-2);
-
for_each(v1.begin(),v1.end(),[](
int value){
cout << value <<
" ";});
-
}
总结:
vector迭代器失效: 当我们插入一个元素时它的预分配空间不够时,它会重新申请一段新空间,将原空间上的元素复制到新的空间上去,然后再把新加入的元素放到新空间的尾部,以满足vector元素要求连续存储的目的。 正确的做法是 超过vector容量后,重新取一次迭代器。
for_each : STL for_each函数定义在头文件<algorithm>里面,函数原型如下
-
template<
class _InIt, class _Fn1>
-
_Fn1 for_each(InIt _First, InIt _Last, _Fn1 _Func){
-
//perform function for each element
-
for( ; _First != _Last; ++_First)
-
_Func(*_First);
//Note!
-
return (_Func);
-
}
第一个参数与第二个参数是代表一个区间,for_each函数循环将区间中的元素传递给第三个参数(函数对象 or 函数名 or 匿名函数)
由于匿名函数是C++ 11的标准 在编译时 需要加上 -std=c++0x 或者 -std=gnu++0x 选项