推送仅向量矢量一个元素,不重复

时间:2017-12-03 20:41:31

标签: c++

我有一个代码,我应该介绍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个相同的数字,不要打印它们两个但只是其中之一。

提前致谢。

2 个答案:

答案 0 :(得分:0)

填充向量后,您可以先对其中的所有元素进行排序,然后调用std::unique,以删除它中的所有重复项。

尝试查看std::uniquestd::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是文字,因此在编译时已知。要求用户输入数组的长度意味着在编译时不知道它。)