int ar[] = {1, 2, 3, 4, 5, 6, 7};
vector<int> v{9, 8};
v.assign(&ar[0], &ar[3]); // v の内容は{1,2,3}になる
assignは(first* , last*)を取ると書いてあり、このプログラムでは&ar[0], &ar[3]を渡しています。なので、ar[0} = 1, ar[3] = 4なので、vの内容は{1,2,3,4}になると思ったのです。
間違いかなと思い、自分でコンパイルしてみたところ、確かにv[0]、v[1]、v[2]にはそれぞれアクセスでき、それぞれに1,2,3が入っていたのですが、v[3]はアクセスできませんでした。
どうしてvにはar[0]からar[2]までの値しか入れられていないのでしょうか?