我有一個模板模板參數這個簡單的函數。這意味着要採取一個STL容器,智能PTR轉換爲正常的PTR(這是一個C++ 03的項目,但我也有興趣在回答對C++ 11):模板模板類,調用一個函數,如果它存在
template <template <typename _T, typename = std::allocator<_T> > class Container>
static Container<T*> GetRawPtrContainer(const Container<SmartPtr<T> >& input_container)
{
Container<T*> container;
for(typename Container<SmartPtr<T> >::const_iterator it = input_container.begin();
it != input_container.end();
it++)
{
container.push_back(it->ptr);
}
return container;
}
這是類SmartPtr<T>
的靜態成員函數。
您在這裏看到的所有這一切都是從input_container
到input_container
的所有元素都返回。
您可能已經注意到,如果輸入std::vector
,那麼就用O(1)
插入性能問題,而這是罰款std::list
和std::deque
。所以我想要做的就是調用這個循環之前,如果有可能(在編譯時決定):
container.reserve(input_container.size());
我怎麼能這樣做?
對不起,你可以展示一個例子,其中的C + + 03的例子會爲我提出的問題工作? –
就像這樣:https://pastebin.com/c4NARK3e – ACB
你可以添加到答案?我公司的防火牆阻止了pastebin。 –