gpt4 book ai didi

c++ - 使用编辑 QVector

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:35 27 4
gpt4 key购买 nike

所以我正在尝试创建一个简单的程序,允许我使用随机函数来操纵 vector ,但我觉得我忘记了一些相当重要和基本的东西请随时查看我发布的代码,让我知道解决方案是什么。我收到的错误是 myvec 是“索引超出范围,这仅意味着推回在我创建的插入方法中不起作用。不知道为什么,我还是个新手。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QVector>

QVector<QString> myvec;

void insert(QVector<QString> vec);

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::insert(QVector<QString> vec){
vec.push_back("Hello World");
}

void MainWindow::on_pushButton_clicked()
{
insert(myvec);
ui->label->setText(myvec.at(0));
}

最佳答案

你的函数

void MainWindow::insert(QVector<QString> vec){
vec.push_back("Hello World");
}

按值获取 vector 。这意味着当它被调用时,参数被复制用于函数,当你修改那里的值时,它不会反射(reflect)在函数调用的外部实例上(因为修改是在拷贝上完成的)。

您希望通过引用 传递 vector ,这样它就不会被复制,并且对仍然存在于函数调用之外的对象进行修改。这是通过在签名中添加 & 来完成的:

void MainWindow::insert(QVector<QString> & vec){
vec.push_back("Hello World");
}

请注意,您还可以通过 const 引用 传递,通常出于效率原因这样做。这意味着只将引用传递给函数,但不允许修改函数体内的实例。

关于c++ - 使用编辑 QVector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21151206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com