【发布时间】:2021-10-01 11:36:19
【问题描述】:
#include <iostream>
using namespace std;
#include <vector>
#include <queue>
int main(){
vector<int> *v = new vector<int>;
v -> push_back(1);
//min priority queue
priority_queue<int, vector<int>, greater<int>> pq;
pq.push(v[0]); //Able to do pq.push(v -> at(0))
}
那么为什么会出现错误?我不是在我的优先级队列中推送一个整数吗?
【问题讨论】:
-
v是(不必要的)一个指针。v[0]正在推迟该指针。您正在尝试将vector<int>推送到int的优先级队列中 -
不要动态分配向量。向量确实已经动态分配了它的元素,因此(几乎)没有充分的理由使用
new std::vector<int>; -
@Aman pq.push 将只接受一个 int 作为输入。在您的情况下,v[0] 将返回整个向量
。如果你真的想使用 [] 运算符,你可以使用 pq.push(v[0][0]) -
@Aman 没有。
* ( v + 0) == *(v) == *v这只是取消引用指针,而不是访问向量的元素 -
@Aman 现在我明白你的困惑了;)。
std::vector不是数组。arr[0] == *( arr + 0) == *arr。第一个元素与第一个元素具有相同的地址,因此 dereferencignarr为您提供第一个元素。vector的情况并非如此