2
我正在進行一點思考實驗 - 我試圖讓我的生活更輕鬆。我正在處理一個數據結構,其中包含幾個按排序順序保存的元素數組。我將這些數據結構分配到固定大小的塊中,以便更輕鬆地放置內存,並且(在未來的時間)使穩定存儲中的讀取/寫入更加容易。這是我與迄今使用的代碼:C++:我可以使用帶有新位置的矢量嗎?
#include <limits>
const int NODE_SIZE = 512;
template <typename K, typename D>
class Node {
long next;
short num;
K* keys;
D* data;
public:
Node(int l, int order);
};
// num is calculated by something like this...
num = NODE_SIZE - sizeof(Node<K,D>) - sizeof(long);
num /= (sizeof(D) + sizeof(K));
// Constructor
// Will be called with a placement-new and given a NODE_SIZE
// byte block of memory, aligned at NODE_SIZE
template<typename K, typename D>
Node<K,D>::Node(int n) : num (n), next(0) {
keys = reinterpret_cast<K*>(reinterpret_cast<char*>(&next) +
sizeof(*this));
int numbytes = num*sizeof(K);
// Make sure we're aligned to a void *.
if (numbytes % sizeof(void *)) {
numbytes = (numbytes/sizeof(void *)+1)*sizeof(void *);
}
// Align to the number of bytes in a void *
data = reinterpret_cast<D*>(reinterpret_cast<char*>(keys)+numbytes);
for(int i=0; i<num; i++) keys[i] = std::numeric_limits<K>::max();
}
由於關鍵是有序的元素,我真的希望能夠使用一個std :: vector和std ::矢量所以我可以使用別人的矢量插入代碼而不是自己編寫(不是很難,但爲什麼要重新發明輪子?)。
另外,有沒有一種更簡潔的方式來設置我的鍵和數據的指針?任何幫助或建議將受到歡迎。
你知道分配器嗎? – Yakk
我知道它們存在,但我還沒有使用它們。 –
我相信你可以通過提供帶分配器的'std :: vector'來完成你想做的事情。我不確定,因爲我既不明白你在做什麼,也不完全理解分配器,但我的無知與我認爲你和分配器重疊的地方相匹配。 :) – Yakk