C 記憶體對齊

2021-07-05 05:29:59 字數 1438 閱讀 7506

stl中的容器按儲存方式分為兩類,一類是按以陣列形式儲存的容器(如:vector 、deque);另一類是以不連續的節點形式儲存的容器(如:list、set、map)。在使用erase方法來刪除元素時,需要注意一些問題。

在使用 list、set 或 map遍歷刪除某些元素時可以這樣使用:

正確使用方法1

std::list< int> list;

std::list< int>::iterator itlist;

for( itlist = list.begin(); itlist != list.end(); )

else

itlist++;}或

正確使用方法2

std::list< int> list;

std::list< int>::iterator itlist;

for( itlist = list.begin(); itlist != list.end(); )

else

itlist++;

}下面是兩個錯誤的使用方法:

錯誤使用方法1

std::list< int> list;

std::list< int>::iterator itlist;

for( itlist = list.begin(); itlist != list.end(); itlist++)}或

錯誤使用方法2

std::list< int> list;

std::list< int>::iterator itlist;

for( itlist = list.begin(); itlist != list.end(); )

else

itlist++;

}正確使用方法1:通過erase方法的返回值來獲取下乙個元素的位置

正確使用方法2:在呼叫erase方法之前先使用 「++」來獲取下乙個元素的位置

錯誤使用方法1:在呼叫erase方法之後使用「++」來獲取下乙個元素的位置,由於在呼叫erase方法以後,該元素的位置已經被刪除,如果在根據這個舊的位置來獲取下乙個位置,則會出現異常。

錯誤使用方法2:同上。

這裡「++」運算子與我們平常的理解剛好相反,erase( itlist++) 是先獲取下乙個元素的位置在刪除; erase( ++itlist) 是刪除以後再獲取下乙個元素的位置。

在使用 vector、deque遍歷刪除元素時,也可以通過erase的返回值來獲取下乙個元素的位置:

正確使用方法

std::vector< int> vec;

std::vector< int>::iterator itvec;

for( itvec = vec.begin(); itvec != vec.end(); )

else

itlist++;

}注意:vector、deque 不能像上面的「正確使用方法2」的辦法來遍歷刪除。

C 記憶體對齊

vc6.0編譯器對記憶體對齊的管理方式遵循以下兩個原則 1.對於結構體內部變數的對齊方式 變數存放的起始位址相對於結構的起始位址的偏移量 char 偏移量必須為sizeof char 即1的倍數 int 偏移量必須為sizeof int 即4的倍數 float 偏移量必須為sizeof float ...

c 記憶體對齊

一.計算struct的size有兩個原則 pragma pack n n是編譯器的對齊位元組數 1 struct中各成員按照對齊原則 在為當前變數 設為a 分配記憶體時,要參考之前所有變數的偏移量之和 設為d d必須是min n,sizeof a 的倍數,否則編譯器會自動在最後補上缺少的位元組數。2...

C 記憶體對齊

c 中的記憶體對齊 記憶體對齊 在我們的程式中,資料結構還有變數等等都需要占有記憶體,在很多系統中,它都要求記憶體分配的時候要對齊,這樣做的好處就是可以提高訪問記憶體的速度。我們還是先來看一段簡單的程式 程式一 1 include 2 using namespace std 3 4structx1 ...