我刚刚学习了C++中的向量和数组,我看到了其中的函数“erase”,所以我想创建自己的函数,但它有问题[关闭]

j7dteeu8  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(119)

已关闭,此问题需要details or clarity。目前不接受答复。
**想改善这个问题吗?**通过editing this post添加详细信息并澄清问题。

3小时前关闭
Improve this question
当我尝试创建这个函数时,我创建了另一个向量来存储另一个向量中的所有元素,除非迭代器指向的元素。下面是我的函数:

vector<int> deleteElements(vector<int> oldVector, vector<int>::iterator it)
{
    vector<int>::iterator ite = oldVector.begin();
    vector<int> newVector;
    while (ite != oldVector.end())
    {
        if (ite == it)
        {
            ite++;
            continue;
        }
        newVector.push_back(*ite);
        ite++;
    }
    return newVector;
}

我到处搜索,使用Bing AI和Bard和sage-poe,他们都给予了我同样的功能,他们没有告诉我为什么这里的条件总是为真的具体原因“if(ite == it)”

14ifxucb

14ifxucb1#

这就是您可以做的事情(为了简洁起见,省略了输入验证)。

#include <vector>
#include <iterator>

// You have to pass values as const (you promise not to change the content)
// and by reference (the &) to avoid copying the whole vector.
// since you should not pass iterators around just use an index into the vector.
std::vector<int> copy_all_but_value_at_index(const std::vector<int>& values,std::size_t index)
{
    // use on fo vector's constructors to your advantage.
    // copy the first part of the vector to the result
    std::vector<int> retval{ values.begin(), values.begin() + index  };

    // then insert the rest of the values at the end
    retval.insert(retval.end(), values.begin() + index + 1, values.end());
    return retval;
}

int main()
{
    auto result = copy_all_but_value_at_index({ 1,2,3,4,5 }, 3ul);
    return 0;
}

相关问题