C++ 我的代码似乎以错误的顺序执行
我编写了一个打印函数,如下所示C++ 我的代码似乎以错误的顺序执行,c++,C++,我编写了一个打印函数,如下所示 #define NDEBUG void print(vector<int> &vec) { #ifdef NDEBUG std::cout << "vector size: " << vec.size() << std::endl; #endif if (!vec.empty()) { auto temp = vec.back(); vec.pop_ba
#define NDEBUG
void print(vector<int> &vec)
{
#ifdef NDEBUG
std::cout << "vector size: " << vec.size() << std::endl;
#endif
if (!vec.empty())
{
auto temp = vec.back();
vec.pop_back();
print(vec);
std::cout << temp<<std::endl;
}
}
但我预计会是这样的:
vector sise:6
6
vector sise:5
5
vector sise:4
4
vector sise:3
3
vector sise:2
2
vector sise:1
1
vector sise:0
是因为线程的优先级吗?如果是,如何控制代码的正确执行顺序?解决方案 以下几行是颠倒的:
print(vec);
std::cout << temp<<std::endl;
只有在这个递归调用返回之后,才能打印第6项:
std::cout << temp<<std::endl;
std::cout您在输出temp
之前递归调用print
。这样想(用一个较小的例子):
您需要在递归之前输出:
std::cout << temp << std::endl;
print(vec);
std::您不能说线程,但您的代码没有显示任何与线程相关的内容。请使用sscce更新您的问题。您的输出与代码不匹配。前面提到的“sise”和冒号后的空格。如果它是递归的,为什么函数调用后“cout”会起作用?因为递归调用函数后,您会写入cout
。我更新了我的理由。谢谢。我还有一个问题。让我困惑的是,如果我在函数调用之前“不能”,输出将是逻辑的,但当反转时,它似乎会弹出向量的前面并打印出123456。为什么会这样?函数的参数是“vector={1,2,3,4,5,6}”,因为当调用print(vec)
时,cout的第一个输出是当向量为空时,这发生在您刚刚弹出第一个元素时。然后函数将返回,您将打印调用者保存的最后一项,即第二项,依此类推。如果cout的第一个输出将在向量为空时进行,则向量为空,其条件为false,并且if块不得执行。
std::cout << "vector size: " << vec.size() << std::endl;
print(vec);
std::cout << temp<<std::endl;
print vec(2)
cout size: 2
print vec(1)
cout size: 1
print vec(0)
cout size: 0
cout 1
cout 2
std::cout << temp << std::endl;
print(vec);