#include <iostream>
#include <vector>
#include <algorithm>
template <typename T>
void print_vector(std::vector<T> a)
{
for(size_t i = 0; i < a.size(); i++)
{
std::cout << a[i] << ' ';
}
std::cout << std::endl;
}
//向量删除指定元素
template <typename T>
void erase_value(std::vector<T> a, T value)
{
for (size_t i = 0; i < a.size(); )
{
if (a[i] == value)
a.erase(a.begin() + i);
else
i++;
}
print_vector(a);
}
//向量删除重复元素
template <typename T>
void erase_duplicate(std::vector<T> a)
{
//方法1:在原向量上操作
for(auto iter = a.begin(); iter != a.end();)
{
if (iter != find(a.begin(), iter, *iter))
iter = a.erase(iter);
else
iter++;
}
方法2:在新向量上操作
//std::vector<T> temp;
//for (auto iter = a.begin(); iter != a.end(); iter++)
//{
// if (iter == find(a.begin(), iter, *iter))
// {
// temp.push_back(*iter);
// }
//}
//a = temp;
方法3:使用std::unique,输出的元素被排序
//std::sort(a.begin(), a.end());
//a.erase(std::unique(a.begin(), a.end()), a.end()); //a b c d
print_vector(a);
}
//向量删除指定索引元素
template <typename T>
void erase_indices(std::vector<T> a, std::vector<int> indices)
{
for (size_t i = 0; i < indices.size(); ++i)
{
a.erase(a.begin() + indices[i] - i);
}
print_vector(a);
}
int main()
{
std::vector<char> a = { 'b', 'a', 'c', 'a', 'd', 'a', 'b', 'a', 'b'};
std::vector<int> indices = { 0, 4, 8 };
erase_value(a, 'b'); //a c a d a a
erase_duplicate(a); //b a c d
erase_indices(a, indices); //a c a a b a
system("pause");
return 0;
}
python版本代码见:list删除指定元素/重复元素/指定索引元素
python代码非常简洁,不到20行。人生苦短,我用python(笑)。