最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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ù)壓縮,高的評論 (共 條)

分享到微博請遵守國家法律
乌审旗| 恩施市| 大洼县| 余庆县| 桓台县| 崇义县| 宜丰县| 那坡县| 石狮市| 家居| 天台县| 象州县| 诏安县| 遂川县| 定襄县| 容城县| 兰考县| 东安县| 浏阳市| 西平县| 大埔县| 皮山县| 揭东县| 鄂州市| 林甸县| 礼泉县| 华安县| 海丰县| 外汇| 沅江市| 石泉县| 翁源县| 陇西县| 澄江县| 西畴县| 太仆寺旗| 罗定市| 太和县| 弋阳县| 高平市| 临夏市|