c++ - 如何根据 vector 的大小声明数组?

标签 c++ arrays vector

我正在尝试将 vector 复制到数组中,但我不知道如何根据 vector 的大小声明数组。

代码:

int main() {
    vector<int> ivec = {1, 2, 3, 4, 5};
    constexpr size_t size = ivec.size();
    int arr[size];
    for(size_t i = 0; i < ivec.size(); ++i)
        arr[i] = ivec[i];
    for(size_t i : arr)
        cout << i << endl;
    return 0;
}

但是,我认为这不会编译,因为 ivec.size() 不能是常量表达式(尽管我不确定是否是这种情况)。在这种情况下,我如何才能做到这一点而无需手动输入元素数量?

最佳答案

截至目前std::vector size()不是constexpr ,所以你不能在 constexpr 中使用它 session 。因此,您可以尝试使用 new动态大小数组的关键字,但这毫无意义,因为您已经在使用 vector 。

vector<int> vi = {1, 2, 3, 4, 5};
int* arr = new int[vi.size()];
std::copy(vi.begin(), vi.end(), arr);
for (unsigned int i = 0; i < vi.size(); i++)
    std::cout << arr[i] << " ";
delete[] arr;

注意::您可以使用std::begin()第二个例子是因为arr[]是一个数组,但第一个示例不是,因为 arr*是一个指针。然而,std::copy()两者都接受,所以应该没问题。

initializer_list s 可用于 constexpr session :

constexpr initializer_list<int> il = {1, 2, 3, 4, 5};
int arr[il.size()];
std::copy(il.begin(), il.end(), std::begin(arr));
for (unsigned int i = 0; i < il.size(); i++)
    std::cout << arr[i] << " ";

关于c++ - 如何根据 vector 的大小声明数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20750459/

相关文章:

javascript - 从数组数组中删除

arrays - 如何在数组 A 中找到一个随机索引,该索引的值没有出现在数组 B 中?

c++ - 将 vector 声明为类数据成员时出错

c++ - 如何在不关闭 C++ fstream 文件的情况下保存和读取它

c++ - Richedit Msftedit奇怪的边框

c++ - 为什么在抛出 'range error' what()实例后调用终止: 'Range Error' -1

c - 将数组传递给函数时出现语法错误

c++ - 在类的构造函数中初始化一个二维 vector

c++函数无法写入对象

c++ - 如何使用 64 位而不是 32 位解决按位 seive?这两者有什么区别?