내 벡터에 팩토리 함수를 사용하고 이전 값을 부는 resize를 호출하지 않고 반복기를 사용하고 싶습니까?std :: vector에 .resize()없이 유효한 .begin() 및 .end()를 사용하는 방법?
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