我必须创建一个程序,要求用户输入介于10和100之间的20个数字,这些数字将存储在矢量中,但只会存储唯一值。我创建了一个程序来存储范围内的值,但我不知道如何只存储唯一值。这就是我所拥有的:
#include <iostream>
#include <vector>
using namespace std;
void print(vector<int>v);
int main()
{
vector<int>v;
int x;
for (int num = 0; num < 20; num++)
{
cout << "Enter number " << (num + 1) << ":";
cin >> x;
if (10 < x)
{
if (x < 100)
v.push_back(x);
}
}
print(v);
}
void print(vector<int>v2)
{
for (int count = 0; count < v2.size(); count++)
cout << v2[count] << " ";
}
我要感谢大家的帮助。
答案 0 :(得分:2)
您可以使用std::unique
:
http://www.cplusplus.com/reference/algorithm/unique/?kw=unique
using namespace std;
vector<int> v;
int x;
for (int num = 0; num < 20; num++)
{
cout << "Enter number " << (num + 1) << ":";
cin >> x;
if (10 < x)
{
if (x < 100)
v.push_back(x);
}
}
sort(v.begin(), v.end());
vector<int>::iterator it;
it = unique(v.begin(), v.end());
v.resize(distance(v.begin(),it));
答案 1 :(得分:1)
您可以使用std::set
或std::unordered_set
来跟踪您已经看过的值。具体来说,insert
方法将返回值是否已插入集合中。然后,如果值为new,则只将值推入向量。
答案 2 :(得分:1)
我的解决方案,尝试尽可能少地更改代码(添加4行)。我在命令行上运行了它。
请注意,在声明'cin&gt;&gt;之后x',我添加了一个测试,以确定输入的整数是否已经在向量v中。如果测试成功,则放弃向向量添加输入的整数,对其超出范围的影响类似。 / p>
另请注意,必须包含<algorithm>
才能使用find。
只是一点点生锈,我在网上快速搜索,使用'c ++ vector test membership'(当然没有引号:-)作为搜索词。
我认为性能还不是优先考虑的问题,但是如果向量大小远大于20,那么可能值得一个哈希(显然有可比较的<algorithm>
变体),给出更多的日志( n)搜索时间而不是线性搜索时间。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void print(vector<int>v);
int main()
{
vector<int>v;
int x;
for (int num = 0; num < 20; num++)
{
cout << "Enter number " << (num + 1) << ":";
cin >> x;
if (find(v.begin(), v.end(), x) != v.end()) {
continue;
}
if (10 < x)
{
if (x < 100)
v.push_back(x);
}
}
print(v);
}
void print(vector<int>v2)
{
for (int count = 0; count < v2.size(); count++)
cout << v2[count] << " ";
}