gpt4 book ai didi

c++ - for 循环、返回语句、警告、c++ 中的 vector 迭代器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:53 27 4
gpt4 key购买 nike

我有三个关于 C++ 家庭作业的问题。目标是创建一个简单的回文方法。这是我的模板:

#ifndef PALINDROME_H
#define PALINDROME_H

#include <vector>
#include <iostream>
#include <cmath>

template <class T>
static bool palindrome(const std::vector<T> &input)
{
std::vector<T>::const_iterator it = input.begin();
std::vector<T>::const_reverse_iterator rit = input.rbegin();

for (int i = 0; i < input.size()/2; i++, it++, rit++)
{
if (!(*it == *rit)) {
return false;
}
}
return true;
}

template <class T>
static void showVector(const std::vector<T> &input)
{

for (std::vector<T>::const_iterator it = input.begin(); it != input.end(); it++) {
std::cout << *it << " ";
}
}

#endif

关于上面的代码,你可以在for循环的第一部分声明多个迭代器吗?我尝试在 palindrome() 方法中同时定义“it”和“rit”,但我一直收到关于在 rit 之前需要一个“,”的错误。但是当我在 for 循环外剪切和粘贴时,编译器没有错误。 (我使用的是 VS 2008)。

第二个问题,我几乎只是在脑子里放屁。但是我在 palindrome() 方法中使用 return 语句的方式可以吗?在我看来,我认为它的工作原理是,一旦 *it 和 *rit 彼此不相等,函数就会返回 false,此时方法退出。否则,如果它一直执行 for 循环,那么它会在最后返回 true。我对 return 语句在 if block 中的工作方式完全费脑筋,我试着在我的书中查找一个很好的例子,但我找不到。

最后,我收到了这个警告:

\palindrome.h(14) : warning C4018: '<' : signed/unsigned mismatch

现在是因为我运行 for 循环直到 (i < input.size()/2) 并且编译器告诉我输入可以为负数?谢谢!

最佳答案

迭代器是家庭作业的要求吗?此任务可以简化为对 std::equal 的调用:

template <class T>
bool palindrome(const std::vector<T> &input)
{
return equal(input.begin(), input.begin()+input.size()/2, input.rbegin());
}

关于c++ - for 循环、返回语句、警告、c++ 中的 vector 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011515/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com