小编Cos*_*ert的帖子

纯CSS解决方案,用于将项目拆分为动态数量的列

有没有办法在多列中对齐项目,列数取决于最宽的项目?项目高度和容器宽度都是固定的,但项目宽度是动态的.

我正在寻找一种只有CSS的方法来实现以下行为:

(假设父容器的宽度为300px.)

  • 如果最宽的项目大于150px,请使用单个列
  • 如果最宽的项目介于100px和150px之间,请使用两列
  • 如果最宽的项目小于100px,请使用三列
  • ...
  • 如果最宽的项目小于容器宽度/ N,请使用N列

获得此行为的一种可能方法是使用JavaScript并使用JavaScript display:inline-blockwidth属性设置为容器中最宽元素的宽度.

请参阅此JSFiddle以获取示例:

例

但是,我认为应该只有CSS这样做.可能吗?

如果没有,也许有一种优雅的CSS方式将动态大小的项目分发/捕捉到具有固定宽度的容器中的列?

html css css3 flexbox

41
推荐指数
2
解决办法
4804
查看次数

需要C++ R - tree实现

有没有人知道在生产代码R-tree实现中使用的好和简单?(实际上,任何实现 - R*, R+或者PR-tree会很棒)

它是一个模板或库实现无关紧要,但谷歌发现的一些实现看起来非常令人失望......

c++ r-tree

24
推荐指数
4
解决办法
2万
查看次数

C++命名空间和模板

我有一些功能可以组合在一起,但不属于某个对象/实体,因此不能被视为方法.

所以,基本上在这种情况下我会创建一个新的命名空间并将定义放在一个header文件中,即文件中的实现cpp.另外(如果需要)我将在该cpp文件中创建一个匿名命名空间,并将所有不必公开/包含的其他函数放在我的命名空间接口中.

请参阅下面的代码(可能不是最好的示例,可以使用其他程序架构更好地完成,但我想不出更好的示例...)

示例代码(header)

namespace algorithm {
   void HandleCollision(Object* object1, Object* object2);
}
Run Code Online (Sandbox Code Playgroud)

示例代码(cpp)

#include "header"

// Anonymous namespace that wraps 
// routines that are used inside 'algorithm' methods
// but don't have to be exposed
namespace {
   void RefractObject(Object* object1) {
      // Do something with that object
      // (...)
   }
}

namespace algorithm {
   void HandleCollision(Object* object1, Object* object2) {
      if (...) RefractObject(object1);
   }
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.我想这是管理我的代码的好方法,但我不知道如果我有一些基于模板的函数并且想要做的基本相同,我该怎么办.

如果我使用模板,我必须将所有代码放在header …

c++ templates namespaces

7
推荐指数
1
解决办法
9591
查看次数

C++和适当的TDD

嗨!我最近尝试C#在整个项目中开发一个小型项目,我们的团队使用了Test-Driven-Development(TDD)技术(xunit, moq).

我真的认为这很棒,因为(当配对时C#)这种方法允许在编码时放松,在投射时放松并在重构时放松.我怀疑所有这些 - 这TDD实际上简化了编码过程,并且,它允许(最终,对我来说)使用更少的脑细胞工作得到相同的结果.

在那之后,我尝试使用TDD配对C++(我使用Google TestGoogle Mock库),并且,我不知道为什么,但我实际上认为TDD在快速应用程序开发方面是退后一步.

我有一段时间不得不花费大量时间考虑我的测试,建立适当的模拟,重建它们并在我的显示器上发誓.

而且,我显然不能问"我做错了什么?" 或"我的方法有什么问题?",因为我不知道该描述什么.但如果有任何人习惯TDDC++(也可能C#),请告诉我如何正确地做到这一点.

框架建议,架构方法,简单的编码建议 - 如果您有经验TDD & C++,请回复.

c# c++ tdd performance

7
推荐指数
1
解决办法
1082
查看次数

合并k个已排序的链表 - 分析

我正在考虑针对一个问题的不同解决方案.假设我们有K个已排序的链表,我们将它们合并为一个.所有这些列表一起具有N个元素.

众所周知的解决方案是使用每个列表中的优先级队列和弹出/推送第一个元素,我可以理解为什么需要O(N log K)时间.

但让我们来看看另一种方法.假设我们有一些MERGE_LISTS(LIST1, LIST2)程序,它合并了两个已排序的列表,这需要O(T1 + T2)时间,地点T1T2位置LIST1以及LIST2大小.

我们现在所做的通常意味着将这些列表配对并将它们逐对合并(如果数字是奇数,则最后一个列表,例如,在第一步可以忽略).这通常意味着我们必须制作合并操作的以下"树":

N1, N2, N3...代表LIST1, LIST2, LIST3尺寸

  • O(N1 + N2) + O(N3 + N4) + O(N5 + N6) + ...
  • O(N1 + N2 + N3 + N4) + O(N5 + N6 + N7 + N8) + ...
  • O(N1 + N2 + N3 + N4 + .... + NK)

看起来很明显会有log(K)这些行,每个行都实现O(N)操作,因此MERGE(LIST1, LIST2, ... …

algorithm merge list

6
推荐指数
1
解决办法
9043
查看次数

C++程序设计问题

在我参与的几个最近的项目中,我几乎沉迷于以下编码模式:( 我不确定是否有适当的名称,但无论如何......)

假设某个物体处于某种确定状态,我们不想从外部改变这种状态.这些更改可能意味着任何行为都可以调用任何算法,但事实是它们专注于更改某个对象的状态(成员状态,数据状态等).

让我们称之为改变这些对象的一种离散方式Mutator.Mutators应用一次(通常)并且它们有一些内部方法apply(Target& target, ...),它们会立即引起改变对象的状态(事实上​​,它们是某种功能对象).

它们也可以很容易地被同化为并逐个应用(Mutator m1, m2, ...); 他们也可以从一些基本BasicMutatorvirtual void apply(...)方法中得出.

我已经介绍了一些被调用的类InnerMutator,ExplicitMutator它们在访问方面有所不同 - 首先它们也可以改变对象的内部状态,并且应该被声明为friend(friend InnerMutator::access;).


在那些项目中,我的逻辑转向以下列方式工作:

  1. 准备可用的变更器,选择要应用的变更器
  2. 创建并设置object为某个确定的状态
  3. foreach (mutator) mutator.apply(object);

现在的问题.

这个方案很好地工作, (对我来说)似乎是一些非标准但有用的设计模式的样本.

让我觉得不舒服的是那些InnerMutator东西.我不认为将mutator声称为一个朋友对每个可以改变状态的对象都是一个好主意,我不想找到合适的选择.

这种情况可以解决,Mutators还是可以建议一些具有相同结果的替代模式?

谢谢.

c++ mutators

0
推荐指数
1
解决办法
195
查看次数

标签 统计

c++ ×4

algorithm ×1

c# ×1

css ×1

css3 ×1

flexbox ×1

html ×1

list ×1

merge ×1

mutators ×1

namespaces ×1

performance ×1

r-tree ×1

tdd ×1

templates ×1