您的位置:首页 > 其它

STL中vector以及 for_each几种用法

2015-03-22 19:13 399 查看
/*
* 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 选项


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: