繁体   English   中英

如何使用指向结构C ++的向量的迭代器?

[英]How to use an iterator pointing to a vector of structs c++?

我的code需要帮助。 我不明白如何使用返回的pointers访问存储在vector中的结构中的元素:

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迭代器遍历向量中所有找到的条目以及如何访问每个变量的数据变量。 有人可以帮忙吗?

std::find函数系列将迭代器返回到单个元素(如果未找到,则end )。

如果要获取符合条件的所有元素,则可以使用std::copy_if复制到新容器(可能在std::back_inserter的帮助下)。

当然,您可以有自己的循环,多次调用std::find_if并传递前一个vpit加一个作为您搜索范围的开始。

或者使用std::for_each或基于范围的for循环 ,并检查当前元素以查看其是否符合您的条件。

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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM