替换循环以检索数组中第一个元素的索引

时间:2017-05-11 17:00:36

标签: c++ stl

有没有更好的方法来使用谓词搜索第一个元素的索引?

// ... this code looks a bit long to me.  Anyway to do better?
auto it = std::find_if(collection + startAt, 
                       collection + COLLECTION_SIZE, 
                       [](const char* line) { return strlen(line) <= 10; });
int idx = std::dist(collection, it); //= it - collection;

这是我尝试重构下面的C风格代码:

for (posEmptyItem = startAt; strlen(collection[posEmptyItem]) > 10; posEmptyItem++) {}
std::cout << posEmptyItem << std::endl;

这是

的完整示例
#include "stdafx.h"
#include <cstring>
#include <iostream>
#include <algorithm>

#define COLLECTION_SIZE 123

int main()
{
    char* collection[COLLECTION_SIZE]{ "time11,time2,time3",
                                       "time12,time2,time3",
                                       "time13,time2,time3",
                                       "time14,time2,time3",
                                       "time15,time2,time3",
                                       "x\n", 
                                       "" };
    auto startAt = 2;
    int posEmptyItem;

    // legacy code
    for (posEmptyItem = startAt; strlen(collection[posEmptyItem]) > 10; posEmptyItem++) {}
    std::cout << posEmptyItem << std::endl;

    // replace the loop to search an index by calling to standard library
    auto it = std::find_if(collection + startAt, 
                           collection + COLLECTION_SIZE, 
                           [](const char* line) { return strlen(line) <= 10; });
    posEmptyItem = it - collection;
    std::cout << posEmptyItem << std::endl;

    return 0;
}

0 个答案:

没有答案