簡體   English   中英

c ++向量初始化

[英]c++ vector initialization

我一直在使用Code :: Blocks和MingW編譯器中的值進行以下向量初始化:

vector<int> v0 {1,2,3,4};

之后,我不得不將代碼移動到visual studio項目(c ++),並嘗試構建。 我收到以下錯誤:
本地函數定義是非法的

Visual Studio編譯器不支持這種初始化?
如何更改代碼以使其兼容?
我想初始化vector並同時用值填充它,就像數組一樣。

Visual C ++尚不支持初始化列表。

您可以使用此語法最接近的是使用數組來保存初始化程序,然后使用范圍構造函數:

std::array<int, 4> v0_init = { 1, 2, 3, 4 };
std::vector<int> v0(v0_init.begin(), v0_init.end());

你可以在VS2013中做到這一點

vector<int> v0{ { 1, 2, 3, 4 } };

完整的例子

#include <vector>
#include <iostream>
int main()
{    
    using namespace std;
    vector<int> v0{ { 1, 2, 3, 4 } };
    for (auto& v : v0){
        cout << " " << v;
    }
    cout << endl;
    return 0;
}

另一種選擇是boost::assign

#include <boost/assign.hpp>


using namespace boost::assign;
vector<int> v;
v += 1,2,3,4;

我定義了一個宏:

#define init_vector(type, name, ...)\
    const type _init_vector_##name[] { __VA_ARGS__ };\
    vector<type> name(_init_vector_##name, _init_vector_##name + _countof(_init_vector_##name))

並使用這樣的:

init_vector(string, spell, "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" );

for(auto &a : spell)
  std::cout<< a <<" ";

如果您使用的是Visual Studio 2015 ,則使用list初始化vector方法是:

vector<int> v = {3, (1,2,3)};

因此,第一個參數(3)指定大小,列表是第二個參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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