(我来自C背景,新的C ++及其STL)
我正在编写一个C ++矢量数组,它将通过一个函数传递(作为矢量数组的引用)并将在其中处理。
在这种情况下[在C]我会传递一个指向我的自定义数据类型的指针(通过引擎盖下的值调用。)
我的代码在尝试这样做的过程中在编译时出错:
#include <cstdio>
#include <vector>
using namespace std;
/*
the problem is I can't get the syntax. vector<type> &var is
a reference to a single dimension array of vectors.
*/
void pass_arrayOf_vect(vector<int> &array, int lmt);
int main() {
int lmt = 10;
vector<int> lst[lmt];
pass_arrayOf_vect(lst, lmt);
return 0;
}
/*
and the traditional ambiguity of whether using "." or "->" for
accessing or modifying indexes and their members.
*/
void pass_arrayOf_vect(vector<int> &lst, int lmt) {
for (int i = 0; i < lmt; i++) {
lst[i].push_back(i*i);
}
for (int i = 0; i < lmt; i++) {
printf("array[%d]: ", i);
for (int j = 0; j < lst[i].size(); j++) {
printf("%d ",lst[i][j]);
}
printf("\n");
}
printf("\n");
return;
}
答案 0 :(得分:2)
在main
函数中,lst
变量是一个向量数组。当您将其传递给pass_arrayOf_vect
函数时,您将指针传递给第一个元素。
即。当你做的时候
pass_arrayOf_vect(lst, lmt);
它实际上和做
一样pass_arrayOf_vect(&lst[0], lmt);
因此,您调用的函数需要接受向量的指针作为其第一个参数(不是引用):
void pass_arrayOf_vect(vector<int> *array, int lmt);
// ^
// Note use of asterisk instead of ampersand
更好的解决方案是使用std::array
向量代替。或者,如果您使用的是较旧的编译器而不支持std::array
,或者需要运行时可配置的数量(在这种情况下,您无法使用纯C样式数组),请使用向量向量