簡體   English   中英

始終返回相同向量的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM