﻿# V827\. Maximum size of a vector is known at compile time\. Consider pre\-allocating it by calling reserve\(N\)\.

Анализатор обнаружил 'std::vector', максимальный размер которого известен на этапе компиляции\. При этом перед заполнением вектора не вызывался метод 'reserve'\.

Пример:

```cpp
void f()
{
  std::vector<int> v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  v.push_back(5);
  v.push_back(6);
}
```

В этом случае вызовы 'push\_back' могут приводить к реаллокации внутреннего буфера в векторе и перемещении элементов в новую область памяти\.

Чтобы уменьшить накладные расходы, можно заранее выделить буфер необходимого размера:

```cpp
void testVectOK()
{
  std::vector<int> v;
  v.reserve(6);

  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  v.push_back(4);
  v.push_back(5);
  v.push_back(6);
}
```

В сообщении анализатора указывается количество элементов, которое следует передать в метод 'reserve'\.

В некоторых случаях анализатор не может точно вычислить размер контейнера, например, из\-за того, что элементы добавляются под условием:

```cpp
void f(bool half)
{
  std::vector<int> v;
  v.push_back(1);
  v.push_back(2);
  v.push_back(3);
  
  if (!half)
  {
    v.push_back(4);
    v.push_back(5);
    v.push_back(6);
  }
}
```

Количество элементов в контейнере здесь варьируется от 3 до 6 в зависимости от условия\. В таких случаях анализатор будет ориентироваться на максимальный размер\.