![]() |
1
2
您的问题要求在某些容器中复制矩形元素的C++方式。你有一个非常接近的例子,这样做会得到更多的答案。不过,让我们概括一下: 您需要一个迭代器,它在某个元素范围内遍历元素的矩形范围。那么,如何编写一种适配器,它位于任何容器上并提供这个特殊的迭代器。 用这里的代码进行广泛的描述:
我敢肯定这是完全可行的,但我不舒服的编码STL风格的模板材料的袖口。如果我有时间,你感兴趣,我可以稍后重新编辑一个草稿,因为这是一个有趣的概念。 看到这个 SO question's answer 为了灵感。 |
![]() |
2
3
|
![]() |
3
3
基本上是相同的想法,除了它编译并且更具迭代性:
我不希望这比按索引复制两个循环更快。可能更慢,甚至更慢,尽管它基本上是向量::push_back的开销和std::copy通过循环获得的收益之间的竞争。 但是,如果您的其他模板代码设计为一般使用迭代器,而不是作为特定容器的向量,那么它可能更灵活。copyrectFromBiggerRect可以像向量一样轻松地使用数组、deque甚至列表作为输入,尽管目前它对于非随机访问的迭代器不是最佳选择,因为它当前在每个复制行中前进两次。 对于其他类似于C++代码的其他方法,请考虑多维数组的Booo::Mulk数组(在这种情况下,实现将完全不同于此),并且避免返回诸如向量值的集合(首先,如果没有得到返回值优化,则它可能是低效的,第二个是这样)控制分配的资源尽可能保持在最高级别)。 |
![]() |
4
2
良好的C++代码必须首先易于阅读和理解(就像任何代码),面向对象(类似于面向对象语言中的任何代码),然后应该使用语言设施来简化实现。 我不担心使用STL算法使它看起来更像C++-ISH,开始以面向对象的方式简化可用性(接口)会更好。不要在外部使用纯向量来表示图像。提供的级别 抽象化 :创建一个表示图像的类,并在其中提供所需的功能。这将提高可用性 包封 常规使用的详细信息(二维区域对象可以知道其尺寸,用户不需要将其作为参数传递)。这将使代码更加 稳健的 因为用户可以减少错误。 即使使用STL容器,也要考虑 可读性 第一。如果按照常规for循环实现更简单,并且使用STL算法阅读起来更困难,那么请忘记它们:使代码简单且可维护。 这应该是您的重点:制作更好、更简单、更可读的代码。使用语言特性来改进代码,而不是使用代码来练习或展示语言中的特性。如果您需要在两个月后维护该代码,它将得到回报。 注意:使用更多的STL不会使你的代码在C++中更习惯,我相信这是其中的一个例子。滥用STL会使代码变得更糟。 |
![]() |
llewmills · 根据数字是否为整数过滤数值向量[重复] 2 年前 |
![]() |
Rocket Procd · 在c中向向量插入元素++ 2 年前 |
![]() |
Daniel · 为什么我不能手动定义模板参数? 2 年前 |
![]() |
Swantewit · 将数组值推送到Rust中的向量 2 年前 |
![]() |
Giffyguy · 如何限制在构造向量后调用'resize()'? 2 年前 |
![]() |
clarkk · 当声明向量时,(1)是什么意思? 2 年前 |
![]() |
Loui Augst · 仅在局部X轴上将游戏对象指向另一个对象 2 年前 |
![]() |
F.A. · 从int向量中附加整数的字符串不会打印任何内容 2 年前 |