Пытается сделать векторный код от part (5 элементов) из c-массива.Создание вектора из c-массива
const static int size = 10;
cout << "vector from C-array: " << endl;
int ia[size] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
vector<int> vi2(ia, ia + size-5);
Но когда я пытаюсь перечислить векторные элементы, используя всю длину с-массив я получил все элементы, такие как вектор будет инициализирован как vector<int> vi2(ia, ia + size-5);
. Никаких исключений или ошибок, которые выходят за допустимые пределы.
for(int i = 0; i < size; i++) {
cout << i << ":" << vi2[i] << " ";
}
В выходе:
0:1 1:2 2:3 3:4 4:5 5:6 6:7 7:8 8:9 9:10
Почему вектор инициализации, используя второй из параметров, который описывает указатель на массив заканчивается, если он не использует его?
проверили вы 'vi2.size()'? Он должен дать '5', и если это произойдет, доступ за пределы 5-го элемента даст вам неопределенное поведение. –
'vi2' _is_, используя этот конец указателя массива. _You_ - тот, кто игнорирует его и индексирует его до «размера». – Shahbaz
Если вы хотите, чтобы исключение было выбрано, используйте 'vector :: at()' вместо 'vector :: operator []'. \ –