【发布时间】:2021-01-03 20:23:41
【问题描述】:
我正在尝试编写一个相对于给定行坐标翻转区域(表示为一组段)的程序。 我不太了解 C++,所以我遇到了一些错误,我不知道它们为什么会出现以及如何修复它们。 这是我到目前为止得到的:
struct Segment
{
int row;
int colStart;
int colStop;
};
std::vector<Segment> FlipVertically(const std::vector<Segment>& region, const int flipRow){
std::vector<Segment> vec, more, less;
for (std::vector<Segment>::reverse_iterator it = region.rbegin(); it != region.rend(); ++it){
if ((*it).row > flipRow){
more.insert(more.begin(), *it);
}
else{less.insert(less.begin(), *it);}
};
std::sort(more.begin(), more.end(), [](Segment const &a, Segment const &b){
return a.row > b.row;
});
std::sort(less.begin(), less.end(), [](Segment const &a, Segment const &b){
return a.row > b.row;
});
vec.insert(vec.end(), more.begin(), more.end());
vec.insert(vec.end(), less.begin(), less.end());
int counter = 1;
int i = 0;
while(i + 1 < vec.size()){
if (vec[i].row == vec[i + 1].row){
vec[i].row = counter;
}
else{
vec[i].row = counter;
counter++;}
i++;
}
vec.back().row = counter;
return vec;
}
该函数应返回从上到下行存储的段,并且从左到右列在同一行中。 它说while循环中有一个错误:有符号和无符号整数表达式之间的比较[-Wsign-compare]。 另外,我正在寻找改进算法的技巧,因为我觉得它不好,因为我在划分数据后做了两种分类。我在考虑是否可以在第一次迭代期间迭代区域并按照我想要的顺序放置 Segments,但无法找到方法。
【问题讨论】: