将std :: vector传递给修改输入数组的函数

时间:2011-04-02 00:36:14

标签: c++ pointers stl vector iterator

我正在使用第三方API(确切地说是CryptEncrypt),它将C数组作为输入输出参数。从逻辑上讲,API归结为以下功能:

void add1(int *inout, size_t length)
{
  for(size_t i = 0; i < length; i++)
  {
    inout[i] += 1;
  }
}

我试图避免使用原始数组,所以我的问题是我可以使用std :: vector作为上面API的输入吗?如下所示:

#include <vector>
int main()
{
  std::vector<int> v(10); // vector with 10 zeros
  add1(&v[0], v.size());  // vector with 10 ones?
}

我可以使用向量的“连续存储”保证向其写入数据吗?我倾向于认为这是可以的(它适用于我的编译器),但如果比我更有知识的人能够确认这样的用法是否违反C ++标准保证,我会感觉好多了。 :)

提前致谢!

4 个答案:

答案 0 :(得分:6)

  

我可以使用向量的“连续存储”保证向其写入数据吗?

  

我倾向于相信这没关系

你的倾向是正确的。

答案 1 :(得分:3)

由于保证存储是连续的(从2003年的标准修订版开始,甚至在不使用引擎盖的情况下几乎不可能实现合理vector之前),它应该没问题。< / p>

答案 2 :(得分:2)

标准保证存储是连续的,但空向量上的访问元素[0]是标准的未定义行为。因此,您可能会在某些编译器中出错。 (请参阅SO.

中显示Visual Studio 2010此问题的另一篇文章

标准已经在C ++ 0x中解决了这个问题。

答案 3 :(得分:0)

这应该有效。我没有看到任何问题。