我的code
需要帮助。我不明白如何使用返回的pointers
来访问存储在向量中的结构中的元素:
struct receptionEvents
{
int chFreqIndex; //0
int chSFIndex; //1
simtime_t endReceptionTime ;
double SNR; //2
bool collidedFlag; //0= false(Not Corrupted) 1=Corrupted
};
std::vector<receptionEvents> buffRxEvents;
现在在主要功能中,我正在尝试使用以下行找到所有与某个receptionEvents
匹配的名为chFreqIndex
的结构:
int chFreqIndexCheck == 4;
auto vpit = find_if( buffRxEvents.begin(), buffRxEvents.end(), [&]
(receptionEvents const & m) { return m.chFreqIndex == chFreqIndexCheck;} );
现在,我的问题是如何使用vpit迭代器遍历向量中所有找到的条目以及如何访问每个变量的数据变量。有人可以帮忙吗?
答案 0 :(得分:4)
std::find
family of functions将迭代器返回到单个元素(如果未找到,则返回end
)。
如果要获取符合条件的 all 元素,则可以使用std::copy_if
复制到新容器中(可能在std::back_inserter
的帮助下)。
您当然可以拥有自己的循环,多次调用std::find_if
并传递前一个vpit
加一个作为搜索范围的开始。
或者使用std::for_each
或range-based for
loop来检查当前元素以查看其是否符合您的条件。
答案 1 :(得分:1)
std::find_if
仅找到第一个出现的位置。但是您可以从当前找到的元素的后继元素开始搜索下一个元素,例如:
auto vpit = buff.begin();
while(vpit != buff.end())
{
vpit = std::find_if(vpit, buff.end(), [](/*...*/){ /*...*/ });
if(vpit != buff.end())
{
// use it
++vpit; // for not finding current element AGAIN!
}
}
更简单的是基于循环的简单范围:
for(auto e : buff)
{
if( /* ... */ )
{ /* ... */ }
}
编辑:
但是我怎么能使用它
您可以将其当作指针使用:*vpit
用于访问迭代器“指向”的数据,vpit->x
用于访问其成员(如果数据是复杂类型,例如在您的示例中。)
示例:
receptionEvents someCopy = *vpit; // copies entire struct
int cfIndex = vpit->chFreqIndex;