如何像 ac 数组一样初始化 'const std::vector<T>'

新手上路,请多包涵

有没有一种优雅的方法来创建和初始化一个 const std::vector<const T>const T a[] = { ... } 到一个固定(和小)数量的值?

我需要经常调用一个需要 vector<T> 的函数,但在我的情况下这些值永远不会改变。

原则上我想到了类似的东西

namespace {
  const std::vector<const T> v(??);
}

因为 v 不会在这个编译单元之外使用。

原文由 vscharf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 679
2 个回答

对于 C++11:

 vector<int> luggage_combo = { 1, 2, 3, 4, 5 };

原答案:

您要么必须等待 C++0x,要么使用 Boost.Assign 之类的东西来做到这一点。

例如:

 #include <boost/assign/std/vector.hpp>
using namespace boost::assign; // bring 'operator+=()' into scope

vector<int> v;
v += 1,2,3,4,5;

原文由 Ferruccio 发布,翻译遵循 CC BY-SA 4.0 许可协议

老问题,但我今天遇到了同样的问题,这是我最能接受的方法:

 vector<int> initVector(void)
{
    vector<int> initializer;
    initializer.push_back(10);
    initializer.push_back(13);
    initializer.push_back(3);
    return intializer;
}

int main()
{
    const vector<int> a = initVector();
    return 0;
}

避免过度复制的示例:

 vector<int> & initVector(void)
{
    static vector<int> initializer;
    if(initializer.empty())
    {
        initializer.push_back(10);
        initializer.push_back(13);
        initializer.push_back(3);
    }
    return intializer;
}

int main()
{
    const vector<int> & a = initVector();
    return 0;
}

原文由 Kevin 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题