如何从给定指向它的向量中删除元素 - C ++

时间:2016-03-24 15:00:53

标签: c++ vector

如果我有一个看起来像这个{a, b, c, d, e, f}的向量,并且我有一个名为myPointer的指针,并且它指向元素e,那么如何从中删除e矢量?

以下是我想要做的示例代码

vector<char> v = {'a', 'b', 'c', 'd', 'e', 'f'};

char *myPointer = &v[4];

// I want to do something like this
v.erase(myPointer);

// Output
// a, b, c, d, f

可以这样做吗?

2 个答案:

答案 0 :(得分:3)

您可以使用指向第一个元素的指针来计算偏移量,然后使用它来创建一个迭代器以传递给std::vector::erase

auto offset = myPointer - v.data();
v.erase(v.begin() + offset);

这假定myPointer指向v的元素。如果不是,则行为未定义。

工作示例:

#include <vector>
#include <iostream>

int main()
{
    std::vector<int> v{1,2,3,4,5,6,7,8};
    int* p = &v[3];

    v.erase(v.begin() + (p - v.data()));

    for (auto i: v)
        std::cout << i << ' ';

    std::cout << '\n';
}

输出:

  

1 2 3 5 6 7 8

答案 1 :(得分:1)

vector存储的数据是连续的,因此您可以通过以下方式将指针转换为迭代器:获取指向第一个元素的指针,执行指针算术以查找差异,然后将其应用于{{1 }}:

begin