我想编写一个函数来创建具有查看向量的数组。如
int foo(vector<int> &A){
int N=A.size();
int myarray[N]={0}; //here is an error
}
以下是我的问题:
- 我知道构建数组必须使用常量值
vector::size()
但不返回常量值? - 使用
const
修改表达式不起作用N
仍然是变量。
我不明白为什么你需要创建一个数组。如果将任意位置的数组传递到函数中,则会传递指向此类数组的指针。但是你可以很容易地得到矢量的内部数据,如这样的指针:
std::vector<int> v({1, 2, 3, 4});
int* values = v.data();
完成后,您就有了"数组",甚至不必复制数据......
如果您仍然需要副本,只需复制矢量本身即可。
旁注:标准保证矢量的内容是连续的,因此您在迭代"数组"时不会遇到任何麻烦。
但是,实际上存在一个问题:如果要存储指向数组内容的指针,如果向量中添加更多元素,它们可能会失效,因为它可能会重新分配其内容。请注意这一点!(实际上,就像您出于任何原因需要创建一个新数组一样......