国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【數(shù)據(jù)結(jié)構(gòu)】多維數(shù)組如何實(shí)現(xiàn)按需分配內(nèi)存,自動擴(kuò)容?浮點(diǎn)數(shù)如何作為定點(diǎn)數(shù)壓縮,高

2022-10-04 09:38 作者:不會跑路的小向晚  | 我要投稿

std::unique_ptr<Block>[B1][B1];作為一個大體積成員變量在MSVC上編譯時會內(nèi)存溢出(gcc似乎沒有這個問題)。所以從course-master\10\03\00.cpp開始就需要將std::unique_ptr<Block> m_data[B1][B1];改為using Matrix = std::unique_ptr<Block>[B1][B1];

? ? std::unique_ptr<Matrix> m_data;

完美解決

附上修改之后的代碼:

#include<iostream>

#include"bate.h"


#define N (512*512)


struct Grid{

? ? constexpr static int Bshitft = 8; ? ? ? // 整除用的

? ? constexpr static int B = 1 << Bshitft; ?// 索引用的

? ? constexpr static int Bmask = B - 1; ? ? // 取余用的


? ? constexpr static int B1shitft = 11; ? ? ?

? ? constexpr static int B1 = 1 << B1shitft; ?

? ? constexpr static int B1mask = B1 - 1; ? ?


? ? Grid(): m_data((Matrix*)new Matrix){};


? ? struct Block{

? ? ? ? char m_block[B][B];

? ? };


? ? using Matrix = std::unique_ptr<Block>[B1][B1];

? ? std::unique_ptr<Matrix> m_data;


? ? char read(int x, int y) const{

? ? ? ? const std::unique_ptr<Block>& block = (*m_data)[(x >> Bshitft) & B1mask][(y >> Bshitft) & B1mask]; // 因?yàn)閞ead是const函數(shù),所以類屬性的引用需要用const接收

? ? ? ? if(!block) return 0; ? ?// 如果塊指針沒有激活,返回0

? ? ? ? return block->m_block[x & Bmask][y & Bmask];

? ? }


? ?void write(int x, int y, char value){

? ? ? ?std::unique_ptr<Block>& block = (*m_data)[(x >> Bshitft) & B1mask][(y >> Bshitft) & B1mask];

? ? ? ?if(!block) block = std::make_unique<Block>(); ? ?// 如果指針沒有激活,則新建一個塊

? ? ? ?block->m_block[x & Bmask][y & Bmask] = value;

? ?}


? ?template<class Func>

? ?void foreach(const Func& func){

? ? ? ?for(int x1 = 0; x1 < B1; x1++){ ?// 遍歷每個block pointer

? ? ? ? ? ?for(int y1 = 0; y1 < B1; y1++){

? ? ? ? ? ? ? ?const std::unique_ptr<Block>& block = (*m_data)[x1 & B1mask][y1 & B1mask];

? ? ? ? ? ? ? ?if(!block) continue;

? ? ? ? ? ? ? ?int xb = x1 << Bshitft, yb = y1 << Bshitft;

? ? ? ? ? ? ? ? for(int dx = 0; dx < B; dx++){

? ? ? ? ? ? ? ? ? ? for(int dy = 0; dy < B; dy++){

? ? ? ? ? ? ? ? ? ? ? ? func(xb | dx, yb | dy, block->m_block[dx][dy]);

? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? }

? ? ? ? ? ?}

? ? ? ?}

? ?}

};


int main(){

? ? bate::timing("main");


? ? Grid* a = new Grid{};


? ? float px = -100.f, py = 100.f;

? ? float vx = 0.2f, vy = -0.6f;


? ? for(int step = 0; step < N; step++){

? ? ? ? px += vx;

? ? ? ? py += vy;

? ? ? ? int x = (int)std::floor(px);

? ? ? ? int y = (int)std::floor(py);

? ? ? ? a->write(x, y, 1);

? ? }


? ? int count = 0;

? ? a->foreach([&](int x, int y, char& value){

? ? ? ? if(value != 0) ++count;

? ? });


? ? bate::timing("main");

? ? printf("Count=%d", count);

? ? return 0;

}


【數(shù)據(jù)結(jié)構(gòu)】多維數(shù)組如何實(shí)現(xiàn)按需分配內(nèi)存,自動擴(kuò)容?浮點(diǎn)數(shù)如何作為定點(diǎn)數(shù)壓縮,高的評論 (共 條)

分享到微博請遵守國家法律
邵武市| 蒙城县| 金山区| 阿克| 乐平市| 醴陵市| 博爱县| 昌宁县| 黑水县| 杂多县| 德江县| 南江县| 永安市| 辰溪县| 高尔夫| 苏尼特右旗| 苏尼特左旗| 会理县| 腾冲县| 永年县| 什邡市| 霍邱县| 宜城市| 五寨县| 武鸣县| 东港市| 晴隆县| 玉环县| 镇康县| 镇坪县| 长泰县| 齐河县| 同心县| 平原县| 汝州市| 兴海县| 望奎县| 马山县| 溆浦县| 太和县| 施甸县|