我有一个代码,我应该介绍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;
}
所以,我的问题是..如何推送仅重复一次的矢量数字。我的意思是如果在数组中是2个相同的数字,不要打印它们两个但只是其中之一。
提前致谢。
答案 0 :(得分:0)
填充向量后,您可以先对其中的所有元素进行排序,然后调用std::unique
,以删除它中的所有重复项。
尝试查看std::unique和std::sort
的参考资料答案 1 :(得分:0)
使用套装:http://en.cppreference.com/w/cpp/container/set
一组不允许重复。例如,如果您多次插入数字5,则集合中仍然只有一个5。
首先#include<set>
。
然后将vector <int> numbers;
替换为set<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()会为您提供集合中的对象数。此外,您的临时变量未被使用,因此也要消除它。另请注意,set是一个有序容器,因此像这样打印将按升序打印数字。
(另请注意,数组的长度如int arr [3];在编译时必须知道是严格有效的C ++。这里3是文字,因此在编译时已知。要求用户输入数组的长度意味着在编译时不知道它。)