【发布时间】:2021-11-22 10:00:00
【问题描述】:
如何删除vector中选中的随机数据?
#include <iostream>
#include <vector>
int main()
{
std::vector<int> shuf{ 1, 2, 3, 4, 5 };
int random = shuf[rand() % shuf.size()];
std::cout << random; // to get the random data in shu
std::find(shuf.begin(), shuf.end(), random);
shuf.erase(random);
for (int k = 0; k < shuf.size(); k++)
{
std::cout << shuf.at(k) << ' ';
break;
}
}
比如shuf向量中的数据是{ 1, 2, 3, 4, 5 }那么随机数据比如4这样4会在向量中被删除,所以向量中的数据就是shuf{ 1,2,3,5 }
这是我得到的错误
no matching function for call to
'find(std::vector<int>::iterator, std::vector<int>::iterator, int&)'
【问题讨论】:
-
你没有使用
std::find(shuf.begin(), shuf.end(), random)的结果。 -
这是您尝试运行的确切代码吗?如果是,那么您在
std::find(shuf.begin(), shuf.end(), random)之后缺少一个分号。此外,erase采用vector<T>::iterator而不是int。 -
Erase 想要一个 find 返回的迭代器,但只有在 find() 没有返回“end”迭代器时才擦除它。 (在这种情况下它总是会成功。)但是,这种方法并不好,因为 find 是一种线性算法,并且您已经知道要擦除的元素的索引,因此您不必再次查找它- - 只需记住 rand() % shuf.size() 的结果,然后调用 vec.erase(vec.begin() + index);
标签: c++ algorithm c++11 stdvector c++-standard-library