我想爲我的矢量使用工廠函數,並使用迭代器而不調用調整我以前的值的調整大小?如何使用.begin()和.end()沒有.resize()爲std :: vector?
是否有可能或缺少STL設計中的一點?
#include <vector>
#include <algorithm>
#include <iostream>
struct A
{
A():_x(42){}
A(double x):_x(x){}
double _x;
};
struct factory
{
A operator()()
{
return A(3.14);
}
};
int main()
{
std::vector<A> v;
int nbr = 3;
v.reserve(nbr);
std::generate_n(v.begin(), nbr, factory());
std::cout << "Good values" << std::endl;
for(int i = 0 ; i < nbr ; ++i)
std::cout << v[i]._x << std::endl;
v.resize(nbr); //How I can have the syntax below without the resize which blows my previous values ?
std::cout << "resize has been called so values are bad (i.e default ctor)" << std::endl;
for(std::vector<A>::iterator it = v.begin() ; it != v.end() ; ++it)
std::cout << (*it)._x << std::endl;
}
謝謝:)
謝謝!完全忘記了back_inserter迭代器及其屬性:) – Quanteek 2012-07-10 15:16:55