奇怪的C++ Vector输出

fts*_*fts 2 c++ stdvector

我刚开始使用Vectors进行编码并编写了以下基本代码.

#include<iostream>
#include<vector>

using namespace std;

int main(){
    vector<int> second(4,100);

    cout<<second[0]<<endl; 
    cout<<second[1]<<endl; 
    cout<<second[2]<<endl; 
    cout<<second[3]<<endl; 
    cout<<second[4]<<endl; 
    cout<<second[5]<<endl; 
    cout<<second[6]<<endl; 
    cout<<second[7]<<endl; 

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出如下

100
100
100
100
0
135145
0
0

RUN FINISHED; exit value 0; real time: 10ms; user: 0ms; system: 0ms
Run Code Online (Sandbox Code Playgroud)

为什么cout<<second[5]不同于其他指数的输出大于3.任何帮助表示赞赏.

jro*_*rok 6

vector<int> second(4,100);
Run Code Online (Sandbox Code Playgroud)

第一个参数告诉构造函数向量的大小,第二个参数是它应该用来填充它的值.

您已经创建了一个大小为4的向量,这意味着最后一个有效元素是second[3].除此之外的任何东西都会写入或读出不属于向量的内存中的边界,并调用未定义的行为.

您可以使用push_back方法在末尾安全地追加元素.