Exemple #1
0
void fun1(mystack<std::function<bool()>>& stk, int const& n)
{
	if (n<0)
		return;
	for (int itr = 0; itr<n; ++itr)
	{
		std::cout << "fun1: " + std::to_string(itr) << std::endl;
		stk.push(std::function<bool()>([itr, n](){return itr == n - 1; }));
		stk.emplace(std::function<bool()>([itr, n](){return false; }));
	}
	// à ce stade le .top() de stk va renvoyé ()->true
}
Exemple #2
0
void fun2(mystack<std::function<bool()>>& stk)
{
	bool done = false;
	int itr = 0;
	while (!done)
	{
		std::mutex mtx;
		std::unique_lock<std::mutex> lck(mtx);
		stk.not_empty.wait(lck, [&](){ return !stk.empty(); });
		// On prend le premier élement
		auto msg = stk.top();
		stk.pop();
		// Tu fais ton traitement avec 'msg' et tu mets à jour 'done'
		std::cout << "fun2: " + std::to_string(itr) << std::endl;
		++itr;
		done = msg(); // par exemple
	}
}
int sortStack(mystack s, mystack &t)
{
        while(!s.empty())
        {
                int tmp = s.top();
                s.pop();
                while(!t.empty() && t.top() > tmp)
                {
                        s.push(t.top());
                        t.pop();
                }
                t.push(tmp);
        }
        return 0;
}