我有以下主程序,它创建一个 Stack 对象,用整数填充它,然后弹出它们。代码文件很好,但 pop_back() 部分似乎不起作用,即使在 pop_back() 之后它打印了所有值。这怎么可能?
#include<iostream>
#include<vector>
using namespace std;
int main(){
vector<int> myVector; //initalization
int value;
//input in a vector using push_back
for (int i = 0; i < 6;i++){
cin >> value;
myVector.push_back(value);
}
cout<<"Initial vector size:" << myVector.size() <<endl;
for (int i = 0; i < 6;i++){
cout << myVector[i];
}
cout << endl;
myVector.pop_back();
cout<<"Vector size after pop back: " << myVector.size() << endl;
cout << endl;
cout << "First element is: " << myVector.front() << endl;
cout << "Last element is : " << myVector.back() << endl;
for (int i = 0; i < 6;i++){
cout << myVector[i];
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
每个人都专注于说this is undefined behavior fix code,但问题是它为什么有效。
要了解它为什么起作用,您必须vector或多或少地了解它是如何起作用的。
capacity通常size比vectorcapacity分配的内存块不会改变。这是一个优化。int它什么都不做)并且向量的大小会减小。operator[]它时不会检查你是否超过了它的大小。它只返回特定加法器的值pop_back刚刚缩小的尺寸仍然存在请注意,如果您在很可能会崩溃之后调用shrink_to_fit,pop_back否则您将不会收到相同的值。这仍然是未定义的行为,任何事情都可能发生。
查看代码不好的另一种方法是使用atwhich 检查索引是否在有效范围内。
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |