如果我有一个看起来像这个{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
可以这样做吗?
答案 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