C++ 如何在添加后30秒内从链表中删除项目?
如何在添加后30秒内从链表中删除项目?你知道吗?这个问题是我在面试时被问到的C++ 如何在添加后30秒内从链表中删除项目?,c++,list,data-structures,linked-list,C++,List,Data Structures,Linked List,如何在添加后30秒内从链表中删除项目?你知道吗?这个问题是我在面试时被问到的 std::list<int> l; l.push_back(42); l.pop_back(); 除非你有一台速度非常慢的计算机,否则它应该在30秒内完成。首先,你需要能够测量这台计算机的时间。您可以使用std::timeNULL并在所需时间过去之前进行忙碌循环,但这似乎不合适:首先,您在等待时让CPU工作,其次,您在等待时无法完成很多有意义的任务 下一个最好的方法是使用线程:您创建一个线程,该线程将一直
std::list<int> l;
l.push_back(42);
l.pop_back();
除非你有一台速度非常慢的计算机,否则它应该在30秒内完成。首先,你需要能够测量这台计算机的时间。您可以使用std::timeNULL并在所需时间过去之前进行忙碌循环,但这似乎不合适:首先,您在等待时让CPU工作,其次,您在等待时无法完成很多有意义的任务
下一个最好的方法是使用线程:您创建一个线程,该线程将一直等到ellapsed时间,并从列表中删除该元素,而另一个线程将执行一些有意义的工作。C++03标准没有定义处理线程的通用方法,因此您需要查找正在使用的线程库的相关信息。C++11标准确实定义了自己的内存模型,并将线程库作为atnadard库STL的一部分提供。我不确定添加后30秒内的含义,但我认为有两种可能性: 您希望以小于30秒的速度完成此操作,在这种情况下,您只需添加元素,然后将其删除:
std::list<type> my_list;
my_list.push_back(element);
my_list.pop_back();
您希望在尽可能接近30秒的时间内完成此操作,在这种情况下,您只需添加元素,然后在30秒后将其删除:
#include <unistd.h>
// push back element here
sleep(30);
// pop back element here
你说的“在”是指任何时间吗?或者在30秒后。如果你想让物品过期,那么你需要在某处放置一个计时器 您可以创建一种队列,在到期后的固定时间移动项目 您可以像垃圾收集器一样不断地遍历队列,在这种情况下,删除将是不确定的 或者,您可以在项目本身上设置一个计时器,当您将项目添加到队列时启动计时器,该计时器会在其时间到期时向列表发出信号。然后列表可以删除该项。我将使用和:
我相当有信心,我可以实现这一点,我的盒子没有超频和水冷。也许你应该再增加一些条件?列表是否应该在项目“生存”30秒后自动删除项目,例如通过内部线程?您指的是什么睡眠功能?我不知道在C++@Attila中有一个标准的函数,它是一个posix函数,所以它应该在所有类似unix的发行版中。。。这是手册页-这是特定于平台*nix的
int popit();
signal(SIGALRM, popit);
std::list<int> l;
l.push_back(42);
alarm(30);
popit(){
l.pop_back();
}