通过引用传递2个向量的数组作为参数

时间:2013-05-30 14:27:02

标签: c++ arrays vector reference arguments

我试图将一个数组(简单来说是大小为2)作为参数传递给方法“writeToVector()”。此方法将字符串值分配给向量。

我编写了一个独立的测试程序(如下)。但是当我将它集成到我的真实程序中时它不起作用。

我的程序下面有什么问题吗?它只是“偶然”工作吗?

我不确定“writeToVector()”方法的签名是否正确。

typedef std::vector<std::string> ExtensionType;

void writeToVector(ExtensionType *extensions)
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

void main(void)
{
  ExtensionType extensions[2];
  getExtensions(extensions);
  for(// loop through array of vectors)
  {
    for(// loop through vector's elements)
    {
     // print vector contents
    }
  }
}

2 个答案:

答案 0 :(得分:0)

你的函数是危险的,因为假设传递给它的指针指向大小为2或更大的数组的开头。如果不是这种情况,它将陷入堆中。因此,最好传递保证大小为2的内容,例如std::array<EtnensionType, 2>

void writeToVector(std::array<ExtensionType, 2>& extensions)
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

然后

int main()
{
  std::array<ExtensionType, 2> extensions;
  getExtensions(extensions);
}

如果你真的被阵列困住了,那么请确保它只是2号:

void writeToVector(ExtensionType (&extensions)[2])
{
  extensions[0].push_back("A");
  extensions[1].push_back("B");
}

int main()
{
  ExtensionType extensions[2];
  getExtensions(extensions);
}

答案 1 :(得分:0)

我尝试了以下方式:

void writeToVector(ExtensionType extensions [],int size)
{
  for(int i=0,i<size;i++)
   {
     extensions[i].push_back("A");
   }
}

int main()
{
  const int ARRAY_SIZE=2;
  ExtensionType extensions[ARRAY_SIZE];
  getExtensions(extensions,ARRAY_SIZE);
}