我需要使用 STL 向量为优先级队列编写代码
我被分配了使用向量实现优先级队列的任务,之前我使用列表实现了一个队列,这非常简单,因为列表为我提供了我需要的所有功能。除非我遗漏了优先级队列所没有的东西?
cplusplus.com 上对 Priority Queue 的参考说明:在底层容器(向量)上调用 push_back 和对 push_heap 调用一次(我假设是算法),我不确定如何实现 push_heap 和 pop_heap 或者我是否需要根本。
作业特别要求向量
我正在寻找一个很好的实现/解释。
到目前为止,这是 mo 代码:
.cpp
#include"PriorityQueue.h"
#include <algorithm>
PriorityQueue::PriorityQueue(){
}
void PriorityQueue::push(double val){
s.push_back(val);
}
void PriorityQueue::pop(){
}
double PriorityQueue::front() const{
return s.front();
}
double PriorityQueue::back() const{
return s.back();
}
Run Code Online (Sandbox Code Playgroud)
。H
#ifndef PRIORITYQUEUE_H
#define PRIORITYQUEUE_H
#include <vector>
using std::vector;
class PriorityQueue{
public:
PriorityQueue();
void push(double val);
void pop();
double front() const;
double back() const;
private:
vector<double> s;
};
#endif // !PRIORITYQUEUE_H
Run Code Online (Sandbox Code Playgroud)
如果我需要编写代码来跟踪顶部和底部索引,我可能会缺少基本功能,我只是有点卡住了,没有时间浪费尝试不同解决方案的负载。
由于某种原因,我不能在datacenter.cpp中使用vector _vec.它说" 这个 "是"nullptr"
请帮助,谢谢<3
datacenter.h
#pragma once
#include <iostream>
#include <vector>
class datacenter
{
public:
datacenter();
~datacenter();
void get_elements();
std::vector<float> _vec;
};
Run Code Online (Sandbox Code Playgroud)
datacenter.cpp
#include "datacenter.h"
datacenter::datacenter(){}
void datacenter::get_elements()
{
if (_vec.empty()) { //<---- the error appears here
std::cout << "empty" << std::endl;
}
}
datacenter::~datacenter(){}
Run Code Online (Sandbox Code Playgroud)
main.cpp中
#include <iostream>
#include <vector>
#include "datacenter.h"
class datacenter;
int main()
{
std::unique_ptr<datacenter> dc;
dc->get_elements();
}
Run Code Online (Sandbox Code Playgroud) 以下代码仅向vector插入一个值col。该代码是从DBMS代码库(用于导入文件)中提取的,特别是从1
该代码使用void *能够读取任何字段类型(int,float等)。
#include <iostream>
#include <vector>
using namespace std;
void add(std::vector<void*> &col){
reinterpret_cast<std::vector<int>&>(col).push_back( 1);
reinterpret_cast<std::vector<int>&>(col).push_back( 2);
reinterpret_cast<std::vector<int>&>(col).push_back( 13);
}
int main() {
std::vector<void*> col;
add(col);
cout << col.size() << endl;
for(int i=0;i<col.size();i++)
cout <<reinterpret_cast<std::vector<int>&> (col)[i] <<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我不确定此代码如何工作?
我正在实时学习C ++,并且对向量有问题,所以我正在编写一些使用向量使它们熟悉的程序。
我遵循了这篇文章中有关打印出向量的size()调用值的建议:
我的代码是一个简单的C ++代码:
#include <vector>
int main(int argc, char ** argv) {
/* create an int vector of size 10, initialized to 0 */
std::vector<int> int_list[10];
int int_list_size;
int_list_size = static_cast<int>(int_list.size()); // <-- compilation error here
} // End main()
Run Code Online (Sandbox Code Playgroud)
我在Ubuntu 16.04上出现此错误:
"error: request for member 'size' in 'int_list', which is of non-class type 'std::vector<int> [10]'
Run Code Online (Sandbox Code Playgroud)
由于向量int_list的大小为10,因此size()不应该返回10,然后我可以将其转换为int吗?
我想知道是否可以将一对[int,int]声明为宏。
所以我想知道我是否可以像
#define X pair<int,int>::first
#define Y pair<int,int>::second
int main()
{
int a[10][10];
pair<int,int> arr;
int sum=0;
...
for(auto p: arr)
sum += a[Y][X] // a[p.second][p.first]
}
Run Code Online (Sandbox Code Playgroud)
但这是错误的。我可以声明一个可以这样表达的宏吗?
我正在尝试使用push_back和for循环将部分和存储在向量中,但是由于某种原因push_back会导致无限循环。
cin >> n;
vector <int> partialSums(n);
for (i = 1; i <= partialSums.size(); ++i) {
sum = sum + i;
partialSums.push_back(sum);
cout << sum << endl;
}
return 0;
Run Code Online (Sandbox Code Playgroud) 我正在开发一个程序来帮助我进行世界建设,该计划会根据用户选择的国家(德语,拉丁语,东部)随机生成定居点(村庄,村庄,城镇,城市)。我已经集成了一种定居者生成系统,以在定居点中创建定居者,每个定居者使用构造函数并将结果作为对象保存在向量中,每个定居者均具有名称,年龄,性别和财富。不幸的是,该程序创建了一个完整的克隆种群,用相同名称,年龄等的移居者填充了载体。
我曾尝试在for循环中初始化Settler类的构造函数,但除了在您每次请求其中一个有关定居者的信息时,会导致获得一组不同的定居者之外,它没有做任何更改。
class Settler {
public:
int settlerAge;
string settlerName;
string settlerGender;
string settlerWealth;
Settler(int type, int nation, int quantity) {
int result{};
string givenName{};
string surName{};
// Latin Male First Name
string latinMaleName[15] = {"Faustus", "Mamercus", "Mettius", "Appius", "Hostus", "Quintus", "Cossus", "Secundus", "Servius", "Gallio", "Tettienus", "Petronius", "Paesentius", "Pescunnius", "Clodius"};
// Latin Surname
string latinSurname[30] = {"Natalinus", "Lucilianus", "Crispian", "Laetinianus", "Falco", "Otho", "Plautius", "Pascentius", "Lepidus", "Moderatus", "Caeparius", "Caetronius", "Hostilius", "Aedinius", "Papius", "Gennadia", "Triaria", "Planta","Amantia", "Mico", "Opilio", "Augusta", "Laevina", "Longina", …Run Code Online (Sandbox Code Playgroud) 尝试存储质数并输出它们,但控制台是空的,什么也没有发生
int main() {
vector <int> v;
int n = 1000;
int order; // Nth order
//cin >> order;
primes(n, v);
for (auto i = v.begin(); i != v.end(); ++i)
cout << *i << ' ';
return 0;
}
Run Code Online (Sandbox Code Playgroud)