2012-03-05 83 views
8

Tôi đã được sử dụng khởi tạo vector sau với giá trị trong Code :: Blocks và trình biên dịch MinGW:C++ vector khởi tạo

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

Sau đó tôi đã phải di chuyển mã cho một dự án visual studio (C++) và tôi đã cố gắng xây dựng. Tôi gặp lỗi sau:
định nghĩa chức năng cục bộ là bất hợp pháp

Trình biên dịch Visual Studio không hỗ trợ loại khởi tạo này?
Tôi cần thay đổi mã để làm cho nó tương thích như thế nào?
Tôi muốn khởi tạo vectơ và điền nó với các giá trị cùng một lúc, giống như một mảng.

+8

Cú pháp này còn xa lạ với C++ 11, và chưa được hỗ trợ trong Visual C++. – ildjarn

+2

Cú pháp này hiện được hỗ trợ trong VS 2013. Nguồn: [Có gì mới cho Visual C++ trong Visual Studio 2013] (https://msdn.microsoft.com/en-us/library/vstudio/hh409293.aspx) –

Trả lời

15

Visual C++ chưa hỗ trợ danh sách trình khởi tạo.

Gần nhất bạn có thể tới cú pháp này là sử dụng một mảng để giữ initializer sau đó sử dụng các nhà xây dựng khoảng:

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

lựa chọn khác là boost::assign:

#include <boost/assign.hpp> 


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

Bạn có thể làm gần trong VS2013

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

Ví dụ đầy đủ

#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; 
} 
-2

Nếu bạn đang sử dụng Visual Studio 2015, cách để khởi tạo một vector sử dụng một list là:

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

Vì vậy, tham số đầu tiên (3) xác định kích thước và danh sách là tham số thứ hai.

+0

Tôi đã thử nhưng, tất cả các yếu tố đều có giá trị cuối cùng. – yane

0

tôi đã xác định một macro:

#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)) 

và sử dụng như thế này:

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

for(auto &a : spell) 
    std::cout<< a <<" "; 
Các vấn đề liên quan