添加到数组C++
Adding to arrays C++
只是想知道如何以以下方式将int添加到数组中;
我得到了游戏的平均帧速率,但据我所知,如果我创建一个[10]的int数组,我就无法在数组的开头添加一个数字。
我想这么做。
myInt[0] = 60
myInt[1] = 59
myInt[2] = 61
我想把30加到myInt[0]上,让它把当前的myInt[0]移动到[1],把[1]移动到[2],所以它只把所有的东西都沿着一移动,然后从数组中去掉最后一个整数。
到目前为止,我试图做的只是改变[0],使我的平均计算变得毫无用处。此外,我正在使用SDL_GetTicks()来获取当前经过的时间。
有没有更好的方法来实现平均帧速率?
听起来像是想要一个循环队列。我会用帧计数器调查运算符"%"。帧计数器总是上升,更新myInt[frame_counter%MY_INT_LENGTH],然后映射reduce myInt并除以MY_INT_ELENGTH。
我建议存储最后8或16个帧速率,而不是10个。这使得mod操作符成为一个位掩码。
编辑
如果你想要一个平均帧速率,你真正应该做的是检查delta_frames/delta_time
在渲染线程或观察者中,每次帧渲染都会增加一个计数器。然后问有多少帧,除以时差。您可以异步轮询平均帧速率,并在轮询时重置帧计数器。
std::vector是您应该使用的,而不是数组,尽管在这种情况下是std::queue。
显示如何工作的快速/混乱代码:
int sum = 0; // should be wrapped in a class or something
const int max_size = 10;
void add(std::queue<int>& q, int fps) {
q.push(fps);
if(q.size() > max_size) {
sum -= q.front();
q.pop();
}
sum += fps;
}
int avg(std::queue<int>& q) {
return sum / q.size();
}
//...
std::queue<int> myQ;
add(myQ, 60);
add(myQ, 61);
add(myQ, 50);
std::cout << avg(myQ);
您应该能够在原始代码中看到您似乎理解的方法。
有没有更好的方法来实现平均帧速率?
为什么是。。。。
以下是我以前使用过的一些代码,用于跟踪视频渲染应用程序的"帧速率"。它是为Windows应用程序编写的。如果您不使用Windows,请将下面的所有"DWORD"类型替换为"unsigned int"。并将GetTickCount调用替换为SDL_getticks()函数。这很简单。每次渲染新帧时都调用OnFrame。只要你想知道,请随时致电GetFrameRate。
class CFrameRateMonitor
{
private:
static const DWORD DEFAULT_INTERVAL = 2000;
bool m_fFirstFrame;
DWORD m_dwInterval; // how often we recompute the average
DWORD m_dwFrames;
DWORD m_dwStartTime;
DWORD m_dwComputedRate;
public:
CFrameRateMonitor();
void Reset();
void OnFrame();
DWORD GetFrameRate();
void SetInterval(DWORD dwInterval);
};
CFrameRateMonitor::CFrameRateMonitor()
{
Reset();
m_dwInterval = DEFAULT_INTERVAL;
}
void CFrameRateMonitor::SetInterval(DWORD dwInterval)
{
m_dwInterval = dwInterval;
}
void CFrameRateMonitor::Reset()
{
m_dwFrames = 0;
m_dwStartTime = 0;
m_dwComputedRate = 0;
m_fFirstFrame = true;
}
DWORD CFrameRateMonitor::GetFrameRate()
{
return m_dwComputedRate;
}
void CFrameRateMonitor::OnFrame()
{
DWORD dwCurrentTime = GetTickCount();
DWORD dwActualInterval = dwCurrentTime - m_dwStartTime;
if (m_fFirstFrame)
{
m_dwStartTime = dwCurrentTime;
m_fFirstFrame = false;
}
else
{
m_dwFrames++;
if (dwActualInterval >= m_dwInterval)
{
// enough time has passed to compute a new interval
// + 500 to "round up"
m_dwComputedRate = (m_dwFrames * 1000 + 500) / dwActualInterval;
// reset counting
m_dwStartTime = dwCurrentTime;
m_dwFrames = 0;
}
}
}
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '