看看deque中两个相等数字之间的长度是否均匀

时间:2014-12-30 23:23:54

标签: c++ vector

我有一个deque<int>,我想知道两个相等数字之间int的数量是否均匀。例如:7,13,4,6,4,13,8,10应为false,1,3,5,3,4,8,7,9,6,5,7应为true。我认为我的程序是正确的,但或者某种原因它在两种情况下都输出了。有什么想法吗? PS:我对迭代器不太满意。


#include <iostream>
#include <deque>
using namespace std;
  bool isJoined ( deque<int>::iterator begin, deque<int>::iterator end )
 {
    for(auto i = begin ; i < end ;i++)
      for(auto j=i+1;j<end;j++)
        if(*i == *j && (j-i)%2 == 0)
          return true;    

   return false;
 }
int main()
{    
   deque<int> test = {1,3,5,3,4,8,7,9,6,5,7};   
   deque<int> test2 = {7,13,4,6,4,13,8,10};
   cout<<isJoined(test.begin(),test.end())<<endl;
   cout<<isJoined(test2.begin(),test2.end())<<endl;
}

1 个答案:

答案 0 :(得分:0)

这里有一个错误的错误:

if(*i == *j && (j-i)%2 == 0)

你想要在迭代器之间严格计算数字的数量......那是[1, 2, 3, 1]你想要的2,但是迭代器之间的区别会给你3。因此,你想要:

if (*i == *j && (j-i+1)%2 == 0)

if (*i == *j && (j-i)%2 == 1)

另外,您可能会发现使用索引运算符更容易,并完全避免使用迭代器:

bool isJoined(const deque<int>& deq)
{
    for (size_t i = 0; i < deq.size(); ++i) {
        for (size_t j = i+1; j < deq.size(); ++j) {
            if (deq[i] == deq[j] && (j-i)%2 == 1) {
                return true;
            }
        }
    }

    return false;
}

这样也可以让你跨越内循环:

for (size_t j = i+1; j < deq.size(); j += 2) {
    // already enforcing an even number of numbers in bewteen
    if (deq[i] == deq[j]) return true; 
}