Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的代码似乎以错误的顺序执行_C++ - Fatal编程技术网

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);