我正在尝试为作业实现一个循环缓冲区。为了节省时间,我想在重新排序缓冲区类中使用双端队列。这是我第一次尝试编写一个包含双端队列的类。
#ifndef ROB_H_
#define ROB_H_
#include <deque>
#include <cstdio>
using namespace std;
class ReorderBuffer{
public:
ReorderBuffer (int size);
void doStuff();
std::deque<int> buffer;
};
ReorderBuffer::ReorderBuffer (int size){
std::deque<int> buffer(size);
}
void ReorderBuffer::doStuff(){
std::deque<int> buffer(4);
buffer.push_back(5);
buffer.push_front(2);
buffer.push_back(3);
buffer.push_back(4);
printf("%d %d\n",buffer.at(0),buffer.pop_front());
}
#endif
Run Code Online (Sandbox Code Playgroud)
在 main 中,我创建了一个大小为 4 的重新排序缓冲区并调用 doStuff()。当我尝试编译时,它说无效使用 void 表达式。我已将错误范围缩小到我对 buffer.pop_front() 的调用。为什么它会抱怨,在我的班级中放置双端队列的最佳方法是什么?谢谢!
我正在尝试实现一个Vector类,用于我的图形项目.我想按长度和类型模拟矢量,我希望能够使用Ax,Ay,Az,Aw来访问矢量A的成员(例如).
这是我的第一次尝试.我绝对不是C++模板的专家!我试图用Vec2,Vec3和Vec4的专用版本来实现一般的Vector类.每个专业类都有一个联合,允许我使用它们的名称访问坐标.不幸的是,我无法弄清楚如何在不重新实现每个专用类的每个向量函数的情况下执行此操作.
请记住,我想实现一些仅适用于特定长度的向量的函数.例如,交叉乘积仅适用于vec3,但点积(或运算符*)适用于所有长度的向量.
#include <cstdint>
using namespace std;
//*********************************************************************
// Vector implementation parameterized by type and size.
//*********************************************************************
template <typename T, size_t SIZE>
class Vector {
public:
T data[SIZE];
size_t size;
Vector(T* arr);
};
template <typename T, size_t SIZE> Vector<T, SIZE>::Vector(T* arr) {
size = SIZE;
for(int i=0; i<size; i++) {
data[i] = arr[i];
}
}
//*********************************************************************
// Vec2 is a specialization of Vector with length 2.
//*********************************************************************
typedef Vector<float, 2> Vec2f;
typedef Vector<int, 2> Vec2d;
template <typename T>
class …Run Code Online (Sandbox Code Playgroud)