
Untitled
By: a guest on
Jul 4th, 2012 | syntax:
None | size: 1.36 KB | hits: 11 | expires: Never
How to write this for-loop using std::for_each or std::transform?
vector<vector<int> > int_vectors;
// ... fill int_vectors
vector<int> ints;
for (vector<vector<int> >::const_iterator iter = int_vectors.begin(); iter != int_vectors.end(); ++iter) {
ints.insert(ints.end(), iter->begin(), iter->end());
}
typedef std::vector<int>::iterator (std::vector<int>::*IteratorGetter)();
std::for_each(int_vectors.begin(), int_vectors.end(),
std::bind(
std::bind(
&std::vector<int>::insert<std::vector<int>::iterator>,
&ints,
std::bind((IteratorGetter)&std::vector<int>::end, &ints),
_1,
_2
),
std::bind((IteratorGetter)&std::vector<int>::begin, _1),
std::bind((IteratorGetter)&std::vector<int>::end, _1)
)
);
typedef std::vector<int> VI;
typedef std::vector<VI> VVI;
VVI int_vectors;
VI ints;
std::for_each(int_vectors.begin(), int_vectors.end(), [&](VI &vec) {
ints.insert(ints.end(), vec.begin(), vec.end());
});
#include <algorithm>
#include <vector>
#include <iostream>
#include <iterator>
using namespace std;
#define all(v) (v).begin(), (v).end()
#define foreach(it, v) for(auto it = (v).begin(); it != (v).end(); ++it)
void main() {
vector<int> vi;
vector<vector<int>> vvi;
foreach(it, vvi) {
copy(all(*it), back_inserter(vi));
}
}