What's your preferred way of returning a list of items?
Hi,
Here are a couple of ways to return some list of items.
struct A
{
};
std::vector<A> aList; // Some list of items.
// Returning a copy.
std::vector<A> getList() { return aList; }
void getList( std::vector<A>& v )
{
std::copy( aList.begin(), aList.end(), v.begin() );
}
void getList( std::vector<A>* v )
{
std::copy( aList.begin(), aList.end(), v->begin() );
}
// Returning a reference to aList.
const std::vector<A>& getList() { return aList; }
const std::vector<A>::const_iterator& getList()
{
return aList.begin();
}
Do you know more ways to return a list? What's your preferred way to
return a list of items?
Also, here comes another trickier one. Let's say I have a map instead
and want to return the keys.
std::map<std::string, A> aMap;
// Returning a copy of the keys.
std::vector<std::string> getList()
{
std::vector<std::string> aKeys;
auto keysEnd = aMap.end();
for( auto i = aMap.begin(); i != keysEnd; ++i )
aKeys.push_back( (*i).first );
return aKeys;
}
void getList( std::vector<std::string>& v )
{
auto keysEnd = aMap.end();
for( auto i = aMap.begin(); i != keysEnd; ++i )
v.push_back( (*i).first );
}
void getList( std::vector<std::string>* v )
{
auto keysEnd = aMap.end();
for( auto i = aMap.begin(); i != keysEnd; ++i )
v->push_back( (*i).first );
}
// But is it even possible to return a reference to
// the keys in a map?
const std::vector<std::string>& getList() { /* What here? */ }
const std::vector<std::string>::const_iterator& getList()
{
/* What here? */
}
How do you usually deal with these kind of list returns?
Thanks,
Daniel