我正在使用第三方API(准确地说是CryptEncrypt),它将C数组作为输入输出参数。从逻辑上讲,API归结为以下功能:将std :: vector传递给修改输入数组的函数
void add1(int *inout, size_t length)
{
for(size_t i = 0; i < length; i++)
{
inout[i] += 1;
}
}
我试图避免使用原始阵列,所以我的问题是我可以使用std ::向量作为输入上面的API?类似以下内容:
#include <vector>
int main()
{
std::vector<int> v(10); // vector with 10 zeros
add1(&v[0], v.size()); // vector with 10 ones?
}
我可以使用'连续存储'保证矢量向其写入数据吗?我倾向于认为这没问题(它适用于我的编译器),但如果有人比我更懂得确认这种用法是否违反C++标准保证,我会感觉好多了。 :)
在此先感谢!
std :: vector的设计目标之一是这个例子应该工作。 – Sjoerd 2011-04-02 00:42:58
在新标准中,甚至有一个'v.data()'成员,所以你不必再写'&v [0]'了,比'add1(v.data()'更清晰。 v.size());'! – Sjoerd 2011-04-02 00:44:50
感谢所有的答案和评论! – 2011-04-02 01:00:19