我正在尝试将 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/