- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我是 c++ 和 Qt 的新手,我正在尝试初始化一个 QVector,它是类初始化列表中的一个类成员,例如:
MyClass::MyClass(QWidget *parent) : QMainWindow(parent) , myVector(QVector<double>(100))
我原以为 QVector 已经分配了 100 个索引,但是当我尝试读取 myVector[0]
时,我收到断言错误“test.exe 中 0x0143bf77 处未处理的异常:0xC0000005:访问冲突读取位置 0x00000004。”程序在 Qt 的这一行停止:
inline T &QVector<T>::operator[](int i)
{ Q_ASSERT_X(i >= 0 && i < d->size, "QVector<T>::operator[]", "index out of range");
return data()[i]; }
我认为这表明我正在尝试访问尚未分配的成员,所以我想我没有正确使用初始化列表。我可以使它成为一个指针并在构造函数中创建一个 new QVector(100)
,但我想了解哪里出了问题以及我如何才能使其更正。
最佳答案
你可能做错了未显示的事情,因为以下代码对我来说工作正常,并且 it should by design .请注意,对于第一个元素,您可以使用便利的 first method .
#include <QVector>
#include <QDebug>
int main()
{
QVector<double> myVector(QVector<double>(100));
qDebug() << "TEST FIRST:" << myVector.first();
return 0;
}
TEMPLATE = app
TARGET = main
SOURCES += main.cpp
TEST FIRST: 0
正如我在评论中指出的那样,您可以使用 reserve method .
void QVector::reserve(int size)
Attempts to allocate memory for at least size elements. If you know in advance how large the vector will be, you can call this function, and if you call resize() often you are likely to get better performance. If size is an underestimate, the worst that will happen is that the QVector will be a bit slower.
The sole purpose of this function is to provide a means of fine tuning QVector's memory usage. In general, you will rarely ever need to call this function. If you want to change the size of the vector, call resize().
所以,你会写这样的东西:
MyClass::MyClass(QWidget *parent)
: QMainWindow(parent)
{
myVector.reserve(100);
}
但是,正如我稍后在评论中指出的那样,简单的构造函数也应该像这样工作:
MyClass::MyClass(QWidget *parent)
: QMainWindow(parent)
, myVector(100)
{
}
您正在做的是调用复制构造函数(尽管是针对隐式共享类),因此它的速度可以忽略不计。它至少比您需要的代码多。
关于c++ - 如何初始化QVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20933509/
如何解决以下问题,即转换 const QVector>至 QVector> ? 我尝试了一些步骤但没有帮助: QVector> points = const_cast>>(abc.points); a
我想知道 QVector> 对象中的元素总数,说 myobject .一种方法是设置一个 for 循环,如下所示: int siz; QVector temp; for(int i=0; i> 的大小
我正在编写一个程序来模拟缓存。我使用 QVector 作为结构。我有一个 QVector 的 QVectors of ints。但是,当我尝试编辑整数时,会导致运行时错误: *** glibc det
我已经声明过: //myclass.h QVector aux; QVector > tests; //myclass.cpp aux = (QVector(2)); 它工作正常,但现在我想将每个 t
我是 C++ 编程的新手,所以我可能只是遗漏了一些东西,但我已经尝试解决这个问题将近一个小时了。 我有一套 QLabels在我的 UI我想每秒更新两次。它更新的数据存储在 QVector 中尺寸为 1
我在 QT 中有以下变量: QVector > buff_d1; 我需要修改“内部” vector : buff_d1.at(i).removeFirst(); buff_d1.at(i).push_
我真的尝试了所有方法,但找不到解决方案,我尝试先初始化外部 QVector,然后初始化内部,但没有成功。 最佳答案 QVector *matrix (as class member) with new
谁能给我一个使用以下构造函数 int Qt 的例子? QVector::QVector(std::initializer_list args); 最佳答案 采用 std::initializer_li
为了完成这项工作,我真的尝试结合我所知道的一切。相信目前的结构不会出现死锁或其他线程问题。然而,有些部分丢失了,可用的文档对我没有帮助(我没有使用 C++ 文档的经验)。 int main() {
我试图将 100 000 个 QString 元素(每个 QString 中大约有 10 个字符)附加到 QVector。之后程序失败。 QVector 可以包含多少个元素是否有一些限制(当然除了物理
我有一个 QVector对于一个结构体,结构体包含许多属性,有些是 int,有些是指向类的指针。和每个 TheCore将绑定(bind)到 QTabWidget 中的选项卡. struct TheCo
如何制作动态数量的小部件的 QVector(或其他一些容器类),例如 QPushButton 或 QComboBox Qt 4? 我在窗口类的构造函数中使用了以下内容: QVector foo; //
这个问题在这里已经有了答案: How does the Comma Operator work (9 个回答) 关闭 6 年前。 我正在尝试分配 QVector 的一部分Qt 中的 double 组
我遇到了问题。 出于某种原因,尽管我在 QString 中有一个值,但对 QVector 执行 append() 不起作用,我最终仍然只有一个空 vector 。 QList listServ
假设我有一个 QVector 存储这些元素:{3, 4, 1, 5, 6}。所以如果我从不同的线程读取每个元素,这会导致错误共享吗? (“读取”的意思是这样的:int i = vector[0];//
我正在尝试创建一个多维数组(C++ 数组类)的 QVector,但我遇到了麻烦 我有一个“节点”类,我想将多维数组的 QVector 作为节点类构造的参数传递,但这不起作用,我遇到了编译错误! Cla
所以我正在尝试创建一个简单的程序,允许我使用随机函数来操纵 vector ,但我觉得我忘记了一些相当重要和基本的东西请随时查看我发布的代码,让我知道解决方案是什么。我收到的错误是 myvec 是“索引
Qt 容器在被多线程使用时作为只读是安全的。但是写访问呢?我可以调整 QVector 的大小并在不同的线程中使用 operator[] 进行写入吗? QVector 的大小将保持不变,每个线程将写入不
我正在尝试将 QVector 与名为 RoutineItem 的自定义对象一起使用。 但是报错: C:\Qt\5.2.1\mingw48_32\include\QtCore\qvector.h:265
我可以看到类被视为调用默认构造函数所需的复杂对象: void QVector::defaultConstruct(T *from, T *to) { if (QTypeInfo::isComp
我是一名优秀的程序员,十分优秀!