[英]C++11 auto transform
我有這個宏
#define DO_ALL_BLEND_INFO(iter) for (iter=s_blend_info.begin(); iter!=s_blend_info.end(); ++iter)
這是主要功能。
BLEND_ITEM_INFO* blend_info;
T_BLEND_ITEM_INFO::iterator iter;
DO_ALL_BLEND_INFO (iter)
{
blend_info = *iter;
if (blend_info->item_vnum == item->GetVnum())
{
}
}
我想做的是擺脫這個宏,並使用自動。 但是我不明白如何在這里使用自動...我想刪除那個宏,但是如果我直接在宏中添加自動呢?
以下內容,僅此而已:
for (const auto &blend_info:s_blend_info)
{
if (blend_info->item_vnum == item->GetVnum())
{
}
}
我的意思是“除此之外”。 沒有宏,沒有任何迭代的聲明。 沒有聲明blend_info
, auto
范圍迭代會為您完成它。
這是另一種方法。 我修改代碼並將s_blend_info
替換為vector<int>
以獲得可編譯的解決方案。
int main()
{
vector<int> s_blend_info;
int blend_info;
vector<int>::iterator iter;
int item = 10;
for (auto iter = s_blend_info.begin(); iter != s_blend_info.end(); ++iter)
{
blend_info = *iter;
if (blend_info == item)
{
}
}
for ( auto &iter : s_blend_info)
{
if (blend_info == item)
{
}
}
DO_ALL_BLEND_INFO_GENERIC(s_blend_info, iter)
{
blend_info = *iter;
if (blend_info == item)
{
}
}
}
#define DO_ALL_BLEND_INFO(iter) for (iter=s_blend_info.begin(); iter!=s_blend_info.end(); ++iter)
#define DO_ALL_BLEND_INFO_GENERIC(container,iterator) for (iterator=container.begin(); iterator!=container.end(); ++iterator)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.