передача std :: vector функции, которая изменяет входной массив

Я использую сторонний 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 
int main()
{
  std::vector v(10); // vector with 10 zeros
  add1(&v[0], v.size());  // vector with 10 ones?
}

Могу ли я использовать гарантию «непрерывного хранения» вектора для записи в него данных? Я склонен полагать, что это нормально (это работает с моим компилятором), но мне было бы намного лучше, если бы кто-то более осведомленный, чем я, мог подтвердить, не нарушает ли такое использование стандартных гарантий C ++. :)

Заранее спасибо!

6
задан ajd. 2 April 2011 в 00:36
поделиться