如何使用range-v3逐个转换范围?

时间:2017-03-08 22:46:08

标签: c++ c++11 c++14 range-v3

我正在编写一个算法来删除重叠,给定一系列行(我称之为"行"由于术语的模糊性"范围" ;在这种情况下)。

这就是line的样子:

struct line {
   int begin, width;
   int end() const { return begin + width; }
};

示例:给定三行(0,3),(1,2)和(5,1)我希望得到(0,3),(3,2)和(5) ,1)转型后。以下是此问题的图形表示:

Overlap Removal

这是该问题的一种可能解决方案:

auto removeOverlap(std::pair<line, line> input)
{
    // keeps first line untouched and shifts the second line to the end of the first one, if necessary
    return std::pair<line, line>{std::get<0>(input), {std::max(std::get<0>(input).end(), std::get<1>(input).begin), std::get<1>(input).width}};
}

int main(int argc, char *argv[])
{

    std::array<line, 3> lines{{{0,3},{1,2},{5,1}}};
    for(int i = 0; i < lines.size()-1; ++i)
    {
        std::tie(lines[i], lines[i+1]) = removeOverlap(std::make_pair(lines[i], lines[i+1]));
    }
    assert(lines[0].begin == 0);
    assert(lines[1].begin == 3);
    assert(lines[2].begin == 5);

我的问题:我怎样才能使用range-v3?

我正在考虑使用修改后的view::chunk(N),其中增量的大小为1(而不是N)。但我真的不知道如何从这一点开始。

2 个答案:

答案 0 :(得分:3)

您可以这样做:

odbccp32.dll

Demo

答案 1 :(得分:1)

void DBManager::connOpen()
{
    path = QCoreApplication::applicationDirPath() + "/GameSuitedb.db";
    mydb=QSqlDatabase::addDatabase("QSQLITE");
    mydb.setDatabaseName(path);
    if(!mydb.open())
    {
        //use lastError() here to figure out what went wrong.  
    }
}

将其输入到原始范围的变换视图,然后按顺序迭代变换后的视图。

从min int的高水位开始。确保int的寿命足够长。

Live example(无法找到一种更简单的方法从数组转换回自身......)