0

我正在尝试将向量数组(为简单起见,大小为 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
    }
  }
}
4

2 回答 2

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);
}
于 2013-05-30T14:27:58.557 回答
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);
}
于 2017-11-26T10:26:27.707 回答