小编the*_*ill的帖子

<algorithm>函数用于查找小于或等于的最后一项,如lower_bound

有没有在使用二进制搜索,像函数lower_bound,但返回的最后一个项目低于或相等,以根据给定的断言?

lower_bound 定义为:

查找具有大于或等于指定值的有序范围中的第一个元素的位置,其中排序标准可以由二元谓词指定.

并且upper_bound:

查找具有大于指定值的有序范围中第一个元素的位置,其中排序条件可以由二元谓词指定.

具体来说,我有一个时间排序事件的容器,在给定的时间内,我想找到之前或之前的最后一个项目.我可以通过上/下限,反向迭代器和使用std::greaterstd::greater_equal?的某种组合来实现这一点.

编辑:如果你在数组开始之前要求一个点,则需要对user763305的建议进行调整:

iterator it=upper_bound(begin(), end(), val, LessThanFunction());
if (it!=begin()) {
  it--; // not at end of array so rewind to previous item
} else {
  it=end(); // no items before this point, so return end()
}
return it;
Run Code Online (Sandbox Code Playgroud)

c++ binary-search lower-bound

40
推荐指数
3
解决办法
2万
查看次数

shared_ptr <>如何安全地允许强制转换为bool?

我正在研究如何std::tr1::shared_ptr<>提供强制转换为bool的能力.在尝试创建一个可以作为简单解决方案进行bool的智能指针时,我已经被抓住了,即

operator bool() {
  return m_Ptr!=0;
}
Run Code Online (Sandbox Code Playgroud)

通常最终可以隐式地转换为指针类型(可能是通过类型提升),这通常是不合需要的.boost和Microsoft实现似乎都使用了涉及强制转换的技巧unspecified_bool_type().任何人都可以解释这种机制如何工作以及它如何防止隐式转换为底层指针类型?

c++ stl shared-ptr

21
推荐指数
2
解决办法
6983
查看次数

是否有任何有用的工具来诊断Qt布局和间距问题?

另请参阅相关问题: 如何调试Qt布局问题

我有一些复杂的小部件层次结构,我正试图布局,并且我遇到了比我预期的更接近或更远的事情的常见问题.我发现一个非常有用的技术是创建一个样式表,其中包含层次结构中不同点的小部件的不同背景和边框颜色的列表.我还添加了一个QFileSystemWatcher每次保存时重新加载样式表,允许快速更改而无需重建.

但是,我一直认为必须有更好的方法.查看Firefox的Web开发人员工具栏等工具,它们可以执行标记边框或显示控件层次结构等操作.是否有任何工具或库可以为Qt应用程序执行此操作?

2016年5月5日更新

我发现诊断间距问题最简单,最有用的方法之一是根据QLayouts转储窗口小部件层次结构.我创建了一些示例代码,其中包含有关大小提示,间隔项,填充和内容边距的信息:https://gist.github.com/pjwhams/6ebc040db3ab55615eafd831e184e39c

另一个工具:https://github.com/robertknight/Qt-Inspector

layout qt

20
推荐指数
1
解决办法
3113
查看次数

是否有visual studio 2008运行时版本的摘要?

我一直在研究一个奇怪的问题,在某些系统上加载某个应用程序的dll失败(使用Global Flags加载器快照标记显示它在LoadLibraryEx中的某个位置).windbg中的日志显示似乎有几个不同版本的MSVCR90.DLL被引用.看来我们的清单中引用的版本与我们正在安装的可再发行的运行时不同.

我一直在努力为Visual Studio服务包和安全修补程序找到不同运行时版本的确定列表,但我找不到任何有用的东西.

在我自己的机器上,我至少安装了五个不同的机器,但我无法将它们与Visual Studio正在构建的内容联系起来.这是我现在所发现的:

是否有比这更完整的列表,或者说明我们正在构建哪个版本?

什么是完全修补的Visual Studio 2008安装?SP1 + ATL修补程序?还有进一步的安全更新吗?

编辑:我发现这个页面至少将所有下载放在一个地方:http://support.microsoft.com/default.aspx? scid = kb; en-us; 2019667&sd = rss&spid = 12913

EDIT2:看来只更新到最新的visual studio库不会自动使用它们 - 你需要显式绑定到最新的库版本

c++ runtime visual-studio-2008

19
推荐指数
1
解决办法
6025
查看次数

简单搜索和替换没有正则表达式

我有一个包含各种通配符的文件,我希望能够从(bash)shell脚本替换它.我有以下内容非常有用,直到其中一个变量包含对正则表达式特殊的字符:

VERSION="1.0"
perl -i -pe "s/VERSION/${VERSION}/g" txtfile.txt   # no problems here

APP_NAME="../../path/to/myapp"
perl -i -pe "s/APP_NAME/${APP_NAME}/g" txtfile.txt  # Error!
Run Code Online (Sandbox Code Playgroud)

所以相反,我想要的东西只是执行文字文本替换而不是正则表达式.是否有任何简单的单行调用perl或其他工具可以执行此操作?

bash perl text

19
推荐指数
4
解决办法
6450
查看次数

如何使用样式表自定义QLabel中链接的外观?

我有一个QLabelQt样式表设置一个深色背景:

QLabel {
background: black;
color: white;
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,直到我添加带有嵌入URL的文本并设置Qt::TextFormatQt::RichText.链接显示为默认深蓝色,在深色背景上难以阅读.

我试过通过样式表来定制它,例如:

a { color: white; }
QLabel!visited { color: white; }
Run Code Online (Sandbox Code Playgroud)

但这没有任何效果.似乎有用的一件事是更改应用程序QPalette:

QPalette newPal(qApp->palette());
newPal.setColor(QPalette::Link, Qt::white);
newPal.setColor(QPalette::LinkVisited, Qt::white);
qApp->setPalette(newPal);
Run Code Online (Sandbox Code Playgroud)

然而,这需要对颜色进行硬编码.我有什么方法可以设置样式表的颜色吗?

编辑:

我发现了自定义调色板的另一个问题.如果我想只需要修改我的窗口小部件的调色板(替换widgetqApp样本上面),那么这是行不通的.我不想影响QLabels应用程序中的所有其他内容,因此如何限制此窗口小部件的调色板更改?

qt stylesheet qlabel

14
推荐指数
3
解决办法
5271
查看次数

Jenkins可以将工件存储在作业目录之外吗?

我目前让Jenkins设置了许多工作,但事实证明很难备份,因为工件存储在作业目录中.我想分别备份作业配置和工件.我敢肯定我记得在某处读到Jenkins现在可以选择将它们存放在工作之外,但我找不到这个.

是否有任何配置选项可以在Jenkins界面上的作业中显示工件?(即,而不仅仅是在其他地方复制工件的加载项)

hudson artifacts jenkins

14
推荐指数
2
解决办法
3万
查看次数

为类的元素定义字典比较的最简单方法是什么?

如果我有一个我希望能够排序的类(即支持一个小于概念),并且它有几个数据项,我需要做词典排序,那么我需要这样的东西:

struct MyData {
  string surname;
  string forename;

  bool operator<(const MyData& other) const {
    return surname < other.surname || (surname==other.surname && forename < other.forename); }
};
Run Code Online (Sandbox Code Playgroud)

对于拥有2个以上数据成员的任何内容,这变得非常难以管理.有没有更简单的方法来实现它?数据成员可以是任何Comparable类.

c++ lexicographic

12
推荐指数
3
解决办法
4813
查看次数

在应用程序窗口的顶部绘制叠加层

我希望能够在我的应用程序窗口上绘制,以便我可以使用一些额外的诊断信息来注释所有小部件,类似于Firefox中的CSS开发人员工具(例如,添加小部件类,样式,突出显示边框等).

我可以遍历小部件树并提取相关信息,但问题是如何使用此信息覆盖所有应用程序窗口?

一种方法是覆盖我QMainWindow的绘画事件,但必须为所有顶级窗口完成.是否有替代方法可以在QDesktopWidget例如上绘画?或者每种QWidget油漆方法的任何钩子?任何涉及子类化的东西QWidget都不适用于标准小部件.

这是我之前提出的问题:

为Mandrill欢呼

编辑:感谢德米特里,我现在有一个非常简单的方法,可以轻松扩展:

class DiagnosticStyle : public QWindowsVistaStyle
{
Q_OBJECT

public: 
    typedef QWindowsVistaStyle BaseStyle;
    void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const;
};


void DiagnosticStyle::drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const
{
    BaseStyle::drawControl(element, option, painter, widget);
    if (widget && painter) {
        // draw a border around the widget
        painter->setPen(QColor("red"));
        painter->drawRect(widget->rect());

        // show the classname of the widget
        QBrush translucentBrush(QColor(255,246,240, 100)); …
Run Code Online (Sandbox Code Playgroud)

qt paint

12
推荐指数
1
解决办法
5757
查看次数

是否有像auto_ptr和shared_ptr这样的通用智能指针不需要C++ 0x?

我想要一个非引用计数的智能指针,可以结合一些的有用的方面auto_ptrshared_ptr.我认为C++ 0x unique_ptr最终是我需要的,但我需要能在Visual Studio 2008和Xcode(gcc 4.2)上编译的东西.

我需要的功能是:

  • 可用于工厂方法,以便在复制时传输所有权(如auto_ptr)
  • 支持release()(如auto_ptr)
  • 可以与前向声明一起使用(如shared_ptr)

所以,我想这真的更好auto_ptr.是否有任何东西在提升或其他地方做到这一点(注意:我没有时间把我的头包裹在Loki周围)?或者我应该自己动手?

编辑:我刚刚阅读了更多关于auto_ptr- 如果你确保每个.cpp文件中都包含类标题,你可以使用前向声明,如果你用智能指针引用标题(例如参见GotW).有人对此有任何一般性建议或经验法则吗?

EDIT2:shared_ptr不可接受的原因是因为我需要一个release()方法,因为我通过引入工厂方法来整理一些遗留代码,但它必须与一些手动指针所有权代码共存.在整个代码库中使用shared_ptr会很棒,但这是一项艰巨的任务.

编辑3:最后,auto_ptr一旦我发现前向包含的怪癖,就足够了.尝试编写自定义删除器shared_ptr以允许可选地删除指针也会很有趣.

c++ smart-pointers shared-ptr

8
推荐指数
1
解决办法
1617
查看次数