c ++忽略数组中的相同数字

时间:2013-05-28 14:16:20

标签: c++ arrays loops for-loop

我有一组随机数,例如

6 5 4 4 8

我需要对其进行排序并在之后打印时删除/忽略相同的数字,所以我所做的是用bubble sorth algorithm对所有内容进行排序并得到类似的内容

4 4 5 6 8

现在为了只打印不同的数字,我写了for loop

for(int i=0;i<n;i++){
    if(mrst[i]!=mrst[i-1] && mrst[i]>0){
        outFile << mrst[i] << " ";
    }
}

我的问题是,我所拥有的数组是[0:12]的间隔,虽然我第一次调用它时,它检查数组索引为-1,看看之前是否有相同的数字,但是它实际上并不存在,但存储在那里的值通常很大,因此有可能存储4,因此,第一个数字将不会被打印出来。如果是这样,如何防止它,重写代码,以便它是最佳的?

3 个答案:

答案 0 :(得分:7)

也许,您正在寻找std::unique算法:

std::sort(mrst, mrst + n);
auto last = std::unique(mrst, mrst + n);

for(auto elem = mrst; elem != last; ++elem)
    outFile << *elem << " ";

答案 1 :(得分:4)

好吧,正如您已经注意到的那样,如果mrst[i] != mrst[i-1],您无法进行检查i == 0 所以我确信您可以想到的方式不是在这种情况下检查 ...(这看起来非常像家庭作业,所以我不是真的愿意给你一个完整的解决方案,但我想我暗示足够了)

另请注意,访问数组边界之外的内存是未定义的行为,因此您在那里所做的事情可以做任何事情,从正确工作到崩溃程序,完全由编译器决定。

答案 2 :(得分:1)

基本上你可以从堆中的任何地方读取。所以mrst [-1]可能会从内存中给你一些垃圾。但你真的应该避免这样做。在你的情况下你可以改变“mrst [i]!= mrst [i-1]&amp;&amp; mrst [i]&gt; 0”到“i == 0 || mrst [i]!= mrst [i- 1]”。

在c ++“A || B”中,如果“A”没问题,则不执行“B”。