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

时间:2018-08-02 11:05:35

标签: c++ vector struct

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

2 个答案:

答案 0 :(得分:4)

std::find family of functions将迭代器返回到单个元素(如果未找到,则返回end)。

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

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

或者使用std::for_eachrange-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;