我正在尝试创建一个通过引用接收向量的函数,如果它看到向量条目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)
使用的问题
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)