Я пытаюсь решить вопрос, в котором от меня требуется создать массив векторов, просканировать их элементы и получить элемент, заданный двумя числами a и b, описывающими его положение в массиве векторов. Проблема в том, что я не знаю, как правильно сканировать элементы. Всего один вектор занимает все элементы.
-----------------
Если вы хотите, чтобы я дополнительно прояснил проблему, см. Ниже:
Вопрос : https://www.hackerrank.com/challenges/variable-sized-arrays/problem?h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen&h_r=next-challenge&h_v=zen.
Код, который я написал (выдача ошибки сегмента):
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n, q;
cin >> n >> q;
vector<int> v[n];
int temp;
for (int i=0; i<n; i++) {
while (cin >> temp) {
v[i].push_back(temp);
// cout << v[i].size << endl;
// increase in size would indicate that the element
// got inserted properly
}
}
int a, b;
for (int j=0; j<q; j++) {
cin >> a >> b;
cout << v[a].at(b) << endl;
}
return 0;
}
Я попытался закомментировать код, чтобы узнать, какая строка неисправна, и вот этот: cout << v[a].at(b) << endl;
. Я предполагаю, что это случай доступа к элементам, которые находятся за пределами поля. Это подводит меня к выводу, что элементы не сканируются должным образом. Я думаю, что массив векторов на самом деле содержит только один вектор, в котором есть все элементы. Таким образом, входные данные не входят в число векторов. Он просто попадает в один вектор. Как это исправить?
Я искал похожие вопросы на переполнение стека, и ближайший из них был таким: Создать массив векторов в C ++ . Ответы там обвиняют mallo c в ошибке сегментации, но мой даже не использует mallo c lol, так что в моем случае это явно не виноват. Они также предлагают использовать вектор векторов, что, вероятно, является лучшим решением, но я хочу выяснить, что не так с моим кодом. Кроме того, векторы имеют тенденцию тратить память в виде пустых ячеек, вот и все.
-----------------
Кроме того, почему вызывает ли эта строка ошибку компиляции: // cout << v[i].size << endl;