将仅重复的矢量推到一个元素
Push to vector only one element, without repeating
我有一个代码,我应该在其中介绍3个数字和一个多维数组。我应该从数组中打印所有数字,这些数字是从开始的3个数字。
这是我的代码:
#include <vector>
#include <iostream>
using namespace std;
int main() {
int r, p, k, nr, n, m, counter=0, temp;
vector <int> numbers;
cout << "Enter value of r, p, k: ";
cin >> r >> p >> k;
cout << "Enter the number of rows and columns: ";
cin >> n >> m;
int T[n][m];
cout << "Enter values: ";
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
cin >> T[i][j];
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
for(int a = 0; a < 1; a++) {
numbers.push_back(T[i][j]);
counter++;
}
}
}
for(int f = 0; f < counter; f++) {
if(r%numbers[f]==0 && p%numbers[f]==0 && k%numbers[f]==0) {
cout << numbers[f] << ' ';
}
}
return 0;
}
所以,我的问题是..如何推动仅重复1次的向量数。我的意思是,如果在数组中是2相同的数字,请不要打印两个,而只是其中一个。
预先感谢。
使用集合:http://en.cppreference.com/w/cpp/container/set
一组不允许重复。例如,如果您多次插入数字5,则该集合中仍然只有一个5。
第一个#include<set>
。
然后用set<int> numbers;
vector <int> numbers;
然后更换
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
for(int a = 0; a < 1; a++) {
numbers.push_back(T[i][j]);
counter++;
}
}
}
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
numbers.insert(T[i][j]);
然后更换
for(int f = 0; f < counter; f++) {
if(r%numbers[f]==0 && p%numbers[f]==0 && k%numbers[f]==0) {
cout << numbers[f] << ' ';
}
}
for (auto i = numbers.cbegin(); i != numbers.cend(); ++i)
if(r % *i == 0 && p % *i == 0 && k % *i == 0)
cout << *i << ' ';
应该这样做。您可以从程序中消除计数器变量,因为numbers.size()为您提供了集合中的对象数量。另外,不使用您的温度变量,因此也可以消除。另外,请注意,集合是一个有序的容器,因此像这样打印它将以升序打印数字。
(还请注意,诸如int arr [3]之类的数组的长度必须在编译时知道严格有效的C 。这里3是字面的,因此在编译时已知。要求用户输入阵列的长度表示在编译时不知道它。)
填充向量后,您可以首先对其中的所有元素进行排序,而不是调用std::unique
,以从中删除所有重复项。
尝试查看std ::独特和std :: sort
相关文章:
- lower_bound()返回最后一个元素
- 使用std::transform将一个范围的元素添加到另一个范围中
- 我想访问std::unique_ptr中的一个特定元素
- 基于范围的 for 循环:迭代使用一个元素扩展的向量
- 使用运算符 [] 引用 std::vector 上最后一个元素时出现问题<>
- 删除映射和分割错误中的一个过去结束元素
- Lower_bound不适用于具有 3 个元素的向量的最后一个元素
- 查找数组中第一个最小值和最后一个最大值元素之间的算术平均值
- 检查 2D 网格的某个元素是否与另一个元素共享对角线、水平线或垂直线
- 如何创建一个所有行大小不同的 2D 数组,并且用户将指定每行将有多少个元素?
- 仅显示链表的最后一个元素
- 为什么在 std::map 上移动无法将元素从一个映射移动到另一个映射
- 查找最小的下一个更大的元素
- push_back通过自行创建的对象获取最后一个元素的向量
- 使用 map.end() 访问 map 的最后一个元素
- 如何知道地图中的最后一个元素是否被删除?
- 选择一个元素而不是一个对象的数组的原因
- std::矢量保存 只推送最后一个元素
- 为什么这个选择排序算法仍然切换一个元素,当它已经是其他元素中最小的元素时?
- 动态分配列表 - 创建一个函数,用于删除所有包含偶数值的元素