【发布时间】:2020-02-22 06:10:34
【问题描述】:
我的目标是获取 3 个标准整数数组并使用向量方法来操作它们,而不必将所有数组元素复制到单独的向量数组中。
我想这样做而不复制数组元素的原因是因为这些将是非常大的数组并且效率是优先考虑的。
以下是我想要的两个示例:
- 最简单的例子:
int arr[10000];
int *ptr;
std::vector<int> & v = ptr;
v.push_back(10);
- 函数示例:
// Function that inputs 3 integer arrays and creates pointers to them.
void use_vector(int *dst, int *src1, int *src2) {
//creates vector references (without copying the original array elements)
std::vector<int> & v_dst = dst;
std::vector<int> & v_src1 = src1;
std::vector<int> & v_src2 = src2;
// do something using vector methods:
v_dst.push_back( v_scr1.size() + v_scr2.size() );
}
在这两种情况下,我都会收到以下错误消息:
error: invalid initialization of reference of type ‘std::vector<int>&’ from expression of type ‘int*’
std::vector<int> &v = ptr;
理想情况下,向量是引用(std::vector &),但如果无法引用,它们也可以是指针(std::vector *)。
【问题讨论】:
-
C++20 将有 std::span 处理这类事情。
-
"我的目标是获取 3 个标准整数数组并使用向量方法来操作它们,而无需将所有数组元素复制到单独的向量数组中。" - 赢了不行。
std::vector需要它自己的元素副本。 -
你能解释一下这些例子的效果吗?对于 c 数组,没有(明显的)向量
push_back等效 -
@foreknownas_463035818 我给出的例子是故意简单的。我将需要使用向量类中的许多方法,因此尝试查找 c 数组等价是没有用的。
-
可能是个误会。我认为这些例子并不简单。您希望 push_back 对您示例中的 c 数组做什么?
标签: c++ arrays pointers vector reference