为什么size()在与其他堆栈交换元素后提供错误的堆栈大小? 我目前正在学习C++的STL容器,我试图交换两个栈的内容,然后输出它们。我用来输出其中一个堆栈的元素的第二个for循环有一个奇怪的行为,我无法向自己解释——为什么当myStack2.size()=3时,for循环只迭代2次

为什么size()在与其他堆栈交换元素后提供错误的堆栈大小? 我目前正在学习C++的STL容器,我试图交换两个栈的内容,然后输出它们。我用来输出其中一个堆栈的元素的第二个for循环有一个奇怪的行为,我无法向自己解释——为什么当myStack2.size()=3时,for循环只迭代2次,c++,C++,正如您所看到的,myStack2只有两次迭代,其中仍然有一个元素(5)。有人能给我解释一下这种行为吗?每次调用pop(),都会减小堆栈的大小。所以,在循环中第一次比较j(0)和size(3)。第二次,尺寸为(2)的j(1)。第三次循环条件为false时,因为每次调用pop()时,j为2,大小为1,因此会减小堆栈的大小。所以,在循环中第一次比较j(0)和size(3)。第二次,尺寸为(2)的j(1)。第三次循环条件为false,因为j为2,大小为1。代码的基本问题是在每次迭代时重新评估各自堆栈的大

正如您所看到的,myStack2只有两次迭代,其中仍然有一个元素(5)。有人能给我解释一下这种行为吗?

每次调用pop(),都会减小堆栈的大小。所以,在循环中第一次比较j(0)和size(3)。第二次,尺寸为(2)的j(1)。第三次循环条件为false时,因为每次调用pop()时,j为2,大小为1,因此会减小堆栈的大小。所以,在循环中第一次比较j(0)和size(3)。第二次,尺寸为(2)的j(1)。第三次循环条件为false,因为j为2,大小为1。代码的基本问题是在每次迭代时重新评估各自堆栈的大小(同时检查
循环的
条件)。
在迭代
i
时,您弹出堆栈的一个元素,在迭代
i+1
时,您再次计算堆栈的大小,该大小现在比原始大小小一个。
以下更改将对您有所帮助

int myStack_size = myStack.size(), myStack2_size = myStack.size();

cout << "myStack contents: " << endl;
  for(int i = 0; i < myStack_size; ++i) {
    cout << myStack.top() << endl;
    myStack.pop();
  }

  cout << "myStack2 contents: " << endl;
  for(int j = 0; j < myStack2_size; ++j) {
    cout << j << ". iteration: ";
    cout << myStack2.top() << endl;
    myStack2.pop();
  }
  cout << "myStack2 size after output iterations: " << myStack2.size() << endl;
int myStack_size=myStack.size(),myStack 2_size=myStack.size();

cout代码的基本问题是,您在每次迭代时都要重新评估相应堆栈的大小(同时检查
循环的
条件)。
在迭代
i
时,您弹出堆栈的一个元素,在迭代
i+1
时,您再次计算堆栈的大小,该大小现在比原始大小小一个。
以下更改将对您有所帮助

int myStack_size = myStack.size(), myStack2_size = myStack.size();

cout << "myStack contents: " << endl;
  for(int i = 0; i < myStack_size; ++i) {
    cout << myStack.top() << endl;
    myStack.pop();
  }

  cout << "myStack2 contents: " << endl;
  for(int j = 0; j < myStack2_size; ++j) {
    cout << j << ". iteration: ";
    cout << myStack2.top() << endl;
    myStack2.pop();
  }
  cout << "myStack2 size after output iterations: " << myStack2.size() << endl;
int myStack_size=myStack.size(),myStack 2_size=myStack.size();

因为您在每次迭代中都在评估
myStack2.size()
。与交换无关。请发布与代码匹配的输出。如果程序不能产生输出,那就是浪费每个人的时间。当然,我怎么会错过这个(headbang),谢谢!因为您在每次迭代中都在评估
myStack2.size()
。与交换无关。请发布与代码匹配的输出。如果程序不能产生输出,那就是浪费每个人的时间。当然,我怎么会错过这个(headbang),谢谢!
int myStack_size = myStack.size(), myStack2_size = myStack.size();

cout << "myStack contents: " << endl;
  for(int i = 0; i < myStack_size; ++i) {
    cout << myStack.top() << endl;
    myStack.pop();
  }

  cout << "myStack2 contents: " << endl;
  for(int j = 0; j < myStack2_size; ++j) {
    cout << j << ". iteration: ";
    cout << myStack2.top() << endl;
    myStack2.pop();
  }
  cout << "myStack2 size after output iterations: " << myStack2.size() << endl;