vector.insert没有调整大小?

sho*_*ies -1 c++ vector

我正在尝试创建一个通过引用接收向量的函数,如果它看到向量条目2,则需要删除该条目并将其替换为4个5的副本.

所以如果向量是222(那么它的大小是n = 3),我想要555555555555作为新的向量

但是,当索引为<n时,它仅适用于前几个.

现在,它会将矢量a改为555522任何想法如何使矢量调整大小?

void replace2 (vector <int>* a, int n){

  for (int i = 0; i < n; ++i){
    if ((*a)[i] == 2){
      (*a).erase((*a).begin() + i);
      for(int j = 0; j < 4; ++j){
      (*a).insert((*a).begin() + i, 5);
            }
        }
      }

}
Run Code Online (Sandbox Code Playgroud)

R S*_*ahu 5

使用的问题

for ( int i = 0; i < n; ++i ) { ... }
Run Code Online (Sandbox Code Playgroud)

已经在其中一条评论中指出:

在循环的第一次迭代之后,(*a)[i]不再等于2.剩余的迭代什么都不做.

如果从向量的末尾迭代并返回,则将简化您的函数.

另外,传递对向量的引用而不是指针.

这是一个完整的程序:

#include <vector>
#include <iostream>

void replace2(std::vector <int>& a, int n){
   for (int i = n-1; i >= 0; --i){
      if (a[i] == 2){
         a.erase(a.begin() + i);
         for(int j = 0; j < 4; ++j){
            a.insert(a.begin() + i, 5);
         }
      }
   }
}

int main()
{
   std::vector<int> a{2, 2, 2};
   replace2(a, 3);

   for(auto item : a )
   {
      std::cout << item;
   }

   std::cout << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

请参阅https://ideone.com/0Lip5j.