对于循环,不打印C+中的最后一个向量值+; 我只是学习C++类,并尝试比较和排序向量值(时间比另一个早),而其他的一切都在工作,向量中的最后一个值没有被打印出来。我猜这与我的主函数中的for循环有关,但我自己无法理解

对于循环,不打印C+中的最后一个向量值+; 我只是学习C++类,并尝试比较和排序向量值(时间比另一个早),而其他的一切都在工作,向量中的最后一个值没有被打印出来。我猜这与我的主函数中的for循环有关,但我自己无法理解,c++,class,for-loop,vector,C++,Class,For Loop,Vector,谢谢你的帮助 main.cpp #include <iostream> #include "Time.h" #include <vector> #include <algorithm> int main() { std::cout << "Please enter hour, minute, second: "; int hour, minute, second; std::cin >> hour >&g

谢谢你的帮助

main.cpp

#include <iostream>
#include "Time.h"
#include <vector>
#include <algorithm>

int main() {
    std::cout << "Please enter hour, minute, second: ";
    int hour, minute, second;
    std::cin >> hour >> minute >> second;
    Time now(hour, minute, second);
        //random time values
    Time now1(13,1,45);
    Time now2(23,47,12);
    Time now3(1,8,8);
    Time now4(19,4,13);

    std::vector<Time> times;
    times.push_back(now1);
    times.push_back(now);
    times.push_back(now2);
    times.push_back(now3);
    times.push_back(now4);
    sort(times.begin(), times.end(), IsEarlierThan);

    for(unsigned int i = 0; i < times.size(); i++){
        //std::cout << times[i] << std::endl;
        times[i].PrintAmPm();
    }

    return 0;
}

您没有看到任何输出,因为当
分钟>=10
秒>=10
时,您的测试从不打印

if ((minute < 10) && (second >=10))
if ((minute < 10) && (second < 10))
if ((minute >= 10) && (second < 10))
// None of these handle minute >= 10 && second >= 10!

无需检查
minute
/
second
的范围,您只需无条件地告诉
cout
应该使用
0
进行填充,并将所需的宽度设置为pad(每次都需要设置,因为输出
char
会重置宽度)。

我不认为这是正确的解决方案。这是一个更容易的解决方案(也是正确的),但询问者的方法也是正确的,在他们的学习水平上可能更容易。@immibis:询问者的方法非常容易出错(正如他们遇到这个问题的事实所证明的那样)。这是一个有原因的指导方针。很容易一次又一次地编写相同的代码,并产生一些微妙的错误,而这些错误是你没有遇到的,因为你的各种错误代码路径都没有被命中。即使OP还没有为IO操纵器做好准备,违反DRY也帮不了他们;在最坏的情况下,他们可以为每个值执行一次手动字符串操作,而不是将其嵌入3-4个不同的输出行。点是,我通常认为“正确”不仅包括工作,而且可以维护和(容易)验证。重复复制和粘贴,并进行小调整,与可维护/可验证相反;事实上,我不想劝阻新程序员不要用显而易见的方式做事,因为否则他们会被人们告诉他们不要做的事情弄得不知所措。一旦你编写和调试了几次相同的代码,你就可以说“哇,这样做容易多了!”但在那之前,你会觉得你的创造力被扼杀了。我不想让人们知道,他们总是要“按本子”做事。他们自己可以得出这个结论。我不知道干什么——谢谢你指点我。我现在才刚开始,这是一个数据结构的课堂作业,帮助我们更好地理解类是如何工作的。不管怎样,谢谢你的帮助!
class Time {
public:
    Time();
    Time(int theHour, int theMinute, int theSecond);

    int getHour() const;
    int getMinute() const;
    int getSecond() const;

    void PrintAmPm() const;

private:
    int hour;
    int minute;
    int second;
};

bool IsEarlierThan(const Time& t1, const Time& t2);
if ((minute < 10) && (second >=10))
if ((minute < 10) && (second < 10))
if ((minute >= 10) && (second < 10))
// None of these handle minute >= 10 && second >= 10!
    std::cout << std::setfill('0')
              << hour1 << ':'
              << std::setw(2) << minute << ':'
              << std::setw(2) << second << amOrPm << std::endl;