查看 deque 中两个相等数字之间的长度是否为偶数
See if length between two equal numbers in deque is even
我有一个deque<int>
,我想找出两个相等数字之间的int
数是否是偶数。例如:7,13,4,6,4,13,8,10
应该是假的,1,3,5,3,4,8,7,9,6,5,7
应该是真的。我认为我的程序是正确的,但是由于某种原因,它在这两种情况下都输出为真。知道为什么吗?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;
}
这里有一个错误:
if(*i == *j && (j-i)%2 == 0)
你想严格计算迭代器之间的数字数量......这是针对您想要2
[1, 2, 3, 1]
,但是迭代器之间的差异会给您带来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;
}
相关文章:
- std::memmove在同一对象之间是否始终安全
- std::weak_ptr 和相应的 std::shared_ptr 之间是否存在数据竞争?
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- C++:这两种将数字写入矩阵的方式之间是否存在显着的速度差异?
- char 和 char& 之间是否存在相对复制开销差异?
- libstdc++的make_shared布局在gcc 4.x和gcc 6.x之间是否发生了变化?
- 如果检查和内联条件之间是否存在编译器差异
- __has_include() 和后续 #include 之间是否存在争用条件
- 这些编译器之间是否有任何区别
- std :: vector用作堆栈和std :: stack之间是否存在任何复杂性差异
- 链接时,"grab what you need" 和 "grab all" 之间是否有某些内容(-wl,--whole-archive)?
- 调用 ADL 时,表达式和命名空间之间是否会发生冲突
- 将全局声明为类声明语句的一部分与使用单独的语句声明全局之间是否有区别
- 返回值 vkEnumeratePhysicalDevices 在不同的 VkInstances 之间是否一致?
- 放置 new 的返回值与其操作数的强制转换值之间是否存在(语义)差异
- vector.size()= 0和vector.empty()之间是否有区别
- 显式运算符 = 调用和 = 运算符之间是否有区别
- IF(INTVAR)和IF(intvar!= 0)之间是否存在区别
- 结构数据D = {0}和结构数据D = {}之间是否存在任何区别
- 编译时,复制构造函数/复制分配和正常功能调用优化之间是否存在任何区别