C ++创建一个向量大小的数组,然后将向量复制到C样式数组中

时间:2018-11-15 06:43:49

标签: c++ c++11 visual-c++

VC ++在以下代码上给出错误:

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> a;
    a.push_back(10);
    a.push_back(20);
    a.push_back(30);
    int arr[a.size()];
    std::copy(a.begin(), a.end(), arr);
    for(int index = 0 ; index < a.size(); index++)
    {
        std::cout << " The value is " << arr[index] << std::endl;
    }
}

在整数数组声明中出错,指出变量' a '的值不能用作常量吗?

我们该如何解决我的目标是将向量的内容传输到' C '样式数组的问题?

2 个答案:

答案 0 :(得分:3)

此错误取决于编译器。 C ++在数组定义中需要常量。一些编译器提供了扩展,有助于在声明Array时使用非常量。我已成功在Xcode 10(GCC)上编译了您的代码。

对于您的编译器,您只需添加int *arrPtr = a.data();即可获得给定数组的c样式数组指针。

int main()
{
    std::vector<int> a;
    a.push_back(10);
    a.push_back(20);
    a.push_back(30);
    //int arr[a.size()];
    //std::copy(a.begin(), a.end(), arr);
    //for(int index = 0 ; index < a.size(); index++)
    //{
    //    std::cout << " The value is " << arr[index] << std::endl;
    //}

    int *arrPtr = a.data();
    for(int index = 0 ; index < a.size(); index++)
        std::cout<< " The value is " << arrPtr[index] << std::endl;

    for(int index = 0 ; index < a.size(); index++)
    {
        std::cout<< " The value is " << *arrPtr << std::endl;
        arrPtr++;
    }
}

答案 1 :(得分:-2)

编译器会告诉您a.size()不是compile time常量吗?因此,您不能像这样声明数组。您需要呼叫int *arr = new int[a.size()];,然后再将其删除。