[英]A function that always returns the same vector
我正在嘗試編寫一個返回向量的實用函數。 返回的向量將始終具有相同的條目。 我用它來過濾枚舉( Directions
),以便客戶端可以獲得所需的子集。
以下是我希望如何解決問題的示例:
std::vector<Directions> horizontalDirections()
{
static std::vector<Directions> toReturn;
if (toReturn.size() == 0)
{
toReturn.push_back(Left);
toReturn.push_back(Right);
}
return toReturn;
}
這是正確的方法嗎?
你這樣做的方式。 但我會返回一個const
引用,以便在不需要時可以避免副本:
const std::vector<Directions>& horizontalDirections();
此外,如果您使用的是C ++ 11,則您的實現可以縮寫為:
const std::vector<Directions>& horizontalDirections()
{
static std::vector<Directions> toReturn({Left, Right});
return toReturn;
}
如果使用C ++ 11,你可以更進一步,並將horizontalDirections
聲明為全局const vector
而不是函數:
const std::vector<Directions> horizontalDirections({Left, Right});
這基本上是正確的想法。 我將通過引用返回以避免復制向量。 並且您可以使用C ++ 11初始化列表樣式使身體更清晰:
const std::vector<Directions>& horizontalDirections() {
static const std::vector<Directions> toReturn = {
Left,
Right
};
return toReturn;
}
我根本不會將它作為一個函數,但在全局范圍內作為這樣的常量:
const std::vector<Direction> horizentalDirections = {Left, Right};
這是常量的作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.