通过c ++中的函数传递和修改向量数组

时间:2016-11-24 07:42:25

标签: c++ pointers vector reference stl

(我来自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;
}

1 个答案:

答案 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样式数组),请使用向量向量