如何在旧的c ++中初始化const std向量?

问题描述 投票:5回答:3

我的C ++编译器标识是GNU 4.4.1

我认为自c ++ 11起,您可以通过以下方式初始化向量:

const std::vector<int> myVector = {1, 2, 3};
const std::vector<int> myVector2{1, 2, 3};

[不幸的是,我没有使用c ++ 11,所以myVector只能由构造函数初始化。我需要创建一个永远不会被修改的向量。它必须由类中的不同函数共享,因此它也可以是静态的,甚至是类成员。有没有一种方法可以让我的向量在c ++ 98中定义时初始化,例如上面的示例,或类似的方法?

c++ const stdvector c++98
3个回答
7
投票

您可以从函数返回向量:

std::vector<int> f();
const std::vector<int> myVector = f();

或者,使用boost::assign::list_of


3
投票

@ vll的答案可能更好,但您也可以这样做:

int temp[] = {1, 2, 3};
const std::vector<int> myVector(temp, temp + sizeof(temp)/sizeof(temp[0]));

但是它确实创建了两个副本而不是一个副本,并且使用数组名称污染了名称空间。


3
投票

您已经得到两个很好的答案。这只是两者的组合:

namespace detail {
    template<typename T, size_t N>
    size_t size(const T (&)[N]) { return N; }

    std::vector<int> vecinit() {
        int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        return std::vector<int>(arr, arr+size(arr));
    }
}

//...

const std::vector<int> myVector(detail::vecinit());
© www.soinside.com 2019 - 2024. All rights reserved.