小编Vio*_*ffe的帖子

为什么 std::vector<int>::iterator 不是连续迭代器?

根据标准,如此处引用的应该vector<T>::iterator是连续的(T除了bool),但在所有 3 个主要实现中它不是连续的,为什么?

#include <iterator>
#include <vector>

using InputIterator = std::vector<int>::iterator;
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::random_access_iterator_tag>);
static_assert(std::is_same_v<typename std::iterator_traits<InputIterator>::iterator_category, std::contiguous_iterator_tag>);
Run Code Online (Sandbox Code Playgroud)

第一个static_assert成功了,但第二个在最新的 MSVC、GCC 和 clang 中失败了。

https://godbolt.org/z/oG1x1xdda

c++ iterator c++20

4
推荐指数
1
解决办法
173
查看次数

使用ostringstream格式化double到string

我想将double转换为字符串,在点之后舍入到2位小数.我希望1.009表示为"1.01",1.0表示为"1".这就是我尝试过的:

std::ostringstream oss;
oss << std::fixed << std::setprecision(2) << std::noshowpoint  << 1.0;
Run Code Online (Sandbox Code Playgroud)

它输出"1.00",即使我从未设置宽度甚至指定std::noshowpoint.如何实现理想的表示?

c++ stringstream number-formatting

3
推荐指数
1
解决办法
3624
查看次数

如何获得具有2个相等宽度列的TableLayout

为什么我的表没有相同的列宽?这是完整的布局:首先是表格,然后是表格外的LinearLayout中的两个按钮,它们被平分.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:padding="4dp" >

            <TableRow
                android:layout_marginTop="2dp"
                android:gravity="center_vertical" >

               <TextView
                    style="@style/Label.Plain"
                    android:layout_width="match_parent"
                    android:text="@string/Caption" />

                <EditText
                    android:background="#00ff00"
                    android:layout_width="match_parent"
                    android:layout_weight="1"
                    android:layout_height="@dimen/button_height"
                    android:inputType="numberDecimal"
                    android:selectAllOnFocus="true"
                    android:textSize="@dimen/spinner_text" />
            </TableRow>
        </TableLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="2dp"
            android:layout_marginBottom="3dp"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/btnOk"
                style="@style/Button.Plain.Fill"
                android:layout_weight="1"
                android:text="@string/ALS_OK" />

            <Button
                android:id="@+id/btnClose"
                style="@style/Button.Plain.Fill"
                android:layout_weight="1"
                android:text="@string/CANCEL" />
        </LinearLayout>
    </LinearLayout>

</ScrollView>
Run Code Online (Sandbox Code Playgroud)

这是它的外观(一列为可见性绘制):

在此输入图像描述

我可以在这里使用线性布局,只是想了解背后的逻辑TableLayout.

android android-layout

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

是否可以在QTreeWidget中设置多个项目?

setCurrentItem只设置一个项目.我没有看到任何方法设置多个以编程方式选择的项目,但也许我忽略了什么?

当然,我的树窗口小部件配置为启用多个选择.

请注意,我正在使用QTreeWidget,而不是QTreeView.

c++ qt qtreewidget

3
推荐指数
1
解决办法
3132
查看次数

当 QTreeWidgetItem 悬停时显示工具提示,而不为每个项目调用 setTooltip()

我想显示QTreeWidgetItem悬停的工具提示。但是,在我的情况下,获取工具提示并不是一个非常快的过程,因此我不想调用setTooltip()每个项目。我想根据某些事件或信号按需执行此操作。最简单的方法是什么?

qt tooltip qtreewidget qtreewidgetitem

3
推荐指数
1
解决办法
4053
查看次数

QLocale在安装了语言包的Windows上检测不正确的系统语言

我试图用以下方法检测当前的系统语言QLocale:

QLocale::Language sysLangId = QLocale::system().language();
Run Code Online (Sandbox Code Playgroud)

但是,它无法正常工作.我使用的是应用了英语语言包的俄语Windows 7,但是language()返回俄语而不是英语.有没有解决方法?

windows qt localization internationalization qlocale

3
推荐指数
1
解决办法
5877
查看次数

在Linux和Mac OS X上检测已安装的驱动器

我正在使用QDir::drives()驱动器列表.它在Windows上运行良好,但在Linux和Mac上它只返回单个项目"/",即root.这是预期的行为,但我怎样才能获得Mac和Linux上的驱动器列表?

非Qt原生API解决方案也受到欢迎.

关于"驱动器"定义的澄清:我想得到一个在Finder或Linux内置文件管理器中作为"驱动器"可见的挂载点列表.

c++ linux macos qt disk

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

为什么我不能将const指针推送到std :: vector?

考虑一下代码:

class T;

void constructVector(const T* item)
{
   std::vector<T*> v;
   v.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)

我在使用MSVC 2010编译器时遇到错误:

错误:C2664:'void std :: vector <_Ty> :: push_back(_Ty &&)':无法使用[_Ty = T*]将参数1从'const T*'转换为'T*&&'转换失去限定符

我可以看到这种特殊的转换是非法的,但我不相信我的代码在语义上是错误的.我也相信有push_back(const T&)变种,为什么不符合我的要求?

vector push-back c++11

3
推荐指数
1
解决办法
2123
查看次数

使用QSettings保存64位整数

有什么整洁的方式,短期内恐难号的QByteArray,救quint64QSettings?问题是QVariant不接受qint64也不接受quint64.

64-bit qt qvariant int64 qsettings

3
推荐指数
1
解决办法
4525
查看次数

如何使用标准库函数将字符串(char *)转换为数字并进行错误检查?

我可以想到两种将字符串转换为int:strtol和 的方法std::stringstream。前者不报告错误(如果字符串不是数字的表示),后者抛出异常但它太放松了。一个例子:

std::wstring wstr("-123a45");
int result = 0;
try { ss >> result; }
catch (std::exception&) 
{
   // error handling
}
Run Code Online (Sandbox Code Playgroud)

我想在这里检测一个错误,因为整个字符串不能转换为 int,但没有抛出异常并且结果设置为 -123。如何使用标准 C++ 工具解决我的任务?

c++ string int type-conversion

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