std::tranform a alokacja pamięci

Ku pamięci i jako przestroga - bo błąd ten popełniam już drugi raz:

std::tranform i std::generate i pewnie też parę innych funkcji z nagłówka <algorithm> zakładają, że kontenery docelowe mają już zaalokowane miejsce.

Przykład:

 
#include <map>
#include <vector>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
template <class K, class V>
vector<K> getKeys(const map<K, V>& m)
{
	vector<K> keys(m.size());		//don't forget to use fill constructor!!!
	transform(begin(m), end(m), begin(keys), [](const pair<K, V>& e) -> K {return e.first;});
	return keys;
}
 
int main()
{
	map<string, int> ints = {
		{"zero",	0},
		{"one",		1},
		{"two",		2} 
	};
 
	auto keys = getKeys(ints);
 
	for (auto& k: keys)
		cout << k << endl;
 
	return 0;
}