【发布时间】:2021-10-01 09:27:44
【问题描述】:
vector<int> mergeKSortedArrays(vector<vector<int>*> input) {
vector<int> ans;
//min priority queue
priority_queue<int, vector<int>, greater<int>> pq;
for(int i = 0; i < input.size(); i++){
for(int j = 0; j < input[i] -> size(); j++){
pq.push(input[i][j]); //THIS LINE
}
}
while(!pq.empty()){
ans.push_back(pq.top());
pq.pop();
}
return ans;
}
调用这个函数mergeKSortedArrays的主函数
int main() {
int k;
cin >> k;
vector<vector<int> *> input;
for (int j = 1; j <= k; j++) {
int size;
cin >> size;
vector<int> *current = new vector<int>;
for (int i = 0; i < size; i++) {
int a;
cin >> a;
current->push_back(a);
}
input.push_back(current);
}
vector<int> output = mergeKSortedArrays(input);
for (int i = 0; i < output.size(); i++) {
cout << output[i] << " ";
}
return 0;
}
谁能说出为什么在第一个循环中使用 input[i][j] 会出错?我所知道的方括号如何工作的是它只是去地址和取消引用。所以我不明白为什么使用方括号会有问题。 Input[i] 将我带到向量指针,然后 Input[i][j] 将我带到该向量的地址并取消引用。就像 input[i][j] =*(vector 的地址 + j)。 伙计们,还有一件事,我可以输入 [i] -> at(j)。它编译没有问题。但不是不是不是 input[i][j] 与 input[i] -> at(j) 相同,除非我正在对内存进行非法访问。
【问题讨论】:
-
可能是
vector<vector<int>*> input->vector<vector<int>> input? Edit 并显示调用mergeKSortedArrays的代码。阅读:minimal reproducible example