【发布时间】:2020-07-26 13:06:02
【问题描述】:
我写了一个类,它每秒执行一些操作。这里是:
using namespace std::chrono;
class TimerTest
{
public:
TimerTest()
{
m_start = steady_clock::now();
}
void update() // is called every iteration of the main loop
{
if (duration_cast<seconds>(steady_clock::now() - m_start) >= m_duration)
{
m_start = steady_clock::now();
std::cout << 1; // some action
}
}
private:
time_point<steady_clock> m_start;
duration<double> m_duration = seconds(1);
};
当它由一个单独的变量定义时,它可以正常工作:
int main()
{
TimerTest timer_test;
while (true)
{
timer_test.update();
}
}
每隔一秒 '1' 就会打印到控制台。 但是问题出现了,当我把我的类放到一个向量中时:
int main()
{
std::vector<TimerTest> vec;
vec.push_back(TimerTest());
while (true)
{
for (auto i : vec)
{
i.update();
}
}
}
在向量中,这条if (duration_cast<seconds>(steady_clock::now() - m_start) >= duration) 行工作错误,并且自上次m_start 更新以来经过的时间总是大于m_duration。因此,每次循环迭代都会将“1”打印到控制台。
我真的很想知道这种奇怪行为的原因以及如何解决它。也许我对向量一无所知,因为我在 C++ 方面不是很有经验。
所以,请帮助我理解它。
【问题讨论】:
-
for (auto i : vec)这里i是向量元素的副本。你想要for (auto &i : vec)。