在這種情況下,T
是某種類型,而allocator
是該類型的分配器對象。默認情況下它是std::allocator<T>
,但這不一定是正確的。一個allocator.construct循環是否等於std :: uninitialized_copy?
我有一塊由allocator.allocate(n)
獲得的內存。我也有一個容器con
的T
對象(比如說,一個std::vector<T>
)。我想用T
對象初始化那塊內存。
大塊內存的位置存儲在T* data
中。
這兩個代碼示例總是相同嗎?
#include <memory>
// example 1
std::uninitialized_copy(con.begin(), con.end(), data)
// example 2
std::vector<T>::const_iterator in = con.begin();
for (T* out = data; in != con.end(); ++out, ++in) {
allocator.construct(out, *in);
}
對於這兩個?
#include <memory>
T val = T(); // could be any T value
// example 3
std::uninitialized_fill(data, data + n, val)
// example 4
for (T* out = data; out != (data + n); ++out) {
allocator.construct(out, val);
}
我認爲allocator.address需要一個對象(或引用一個)作爲參數(std :: allocator只是執行&x)。它不會返回最後分配的地址,正如您似乎認爲的那樣。 – 2011-05-18 16:23:51
@Christian Rau:Woops,讓我按照我的代碼進行編輯。 – orlp 2011-05-18 16:25:00
當你說完全相同時,你的意思是關於分配和初始化的內存,或者關於性能或其他內容? – steveo225 2011-05-18 17:40:29