QVector问题

lizheng092 2010-05-25 08:57:49
有如下定义:
QVector<QVector<double> > *test = new QVector<QVector<double> >;

如何对test中的元素进行操作?比如test中含有5*5个元素,如何获取其中(3,3)位置的元素,并对其进行操作?
...全文
880 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
superlemonym 2012-04-21
  • 打赏
  • 举报
回复
请问QVector<QVector<QPoint> >这个怎么用?我想用这个数组画出多条折线,点击左键,画连续的的折线,点击右键,再重新开始画另一条线,该怎么办?求高手指教啊。。
donwmufromdying 2010-05-27
  • 打赏
  • 举报
回复
顺便再问一个:在函数里,怎样返回一个局部变量的指针或引用?
我在一个函数里有一个QVector<QVector <double> * > test,想返回test里面的数据,这个怎么做方便?直接返回时,由于函数返回时,这个指针就编程悬垂指针了,不能得到正确结果。

一般,函数中的局部变量的指针或者引用是不能作为返回类型的,因为出了函数生命周期结束了.关于你的问题是这样的:
QVector<QVector <double> * > foo()
{
QVector<QVector <double> * > test;
test.append(new QVector <double>());
return test;
}

这样没问题.
就是要记得在外边delete掉new出来的东西
比如:
QVector<QVector <double> * > gettor = foo();
qDeleteAll(gettor);

donwmufromdying 2010-05-26
  • 打赏
  • 举报
回复
话说回来,何必用new来使用vector呢?
donwmufromdying 2010-05-26
  • 打赏
  • 举报
回复
(*test)[i][j]
lizheng092 2010-05-26
  • 打赏
  • 举报
回复
比如:t1->at(i).at(j) = 1.0;

data = t1->value(i)[j];
data *= 2.5; // 能实现乘法操作

data1 = t1->value(i)[j];
t1->value(i)[j] *= 2.5; // 不能实现乘法操作,为什么???
data1 = t1->value(i)[j];

data2 = t1->value(i)[j];
t1->value(i)[j] = t1->value(i)[j] *2.5; // 不能实现乘法操作,操作完之后数值不变。
data2 = t1->value(i)[j]; //

data3 = t1->value(i)[j];
t1->value(i)[j] += 1.0; // 不能实现加法操作,为什么???
data3 = t1->value(i)[j];

data4 = t1->at(i).at(j); // at().at()只能当右值

data5 = t1->value(i).value(j); // value().value()应该可以当左值的啊,但t1->value(i).value(j) *= 2.5编译报错,显示*= 左操作数必须为左值

麻烦大家帮我看看这是为什么?我想对t1->at(i).at(j)位置的数进行一些比如乘一个数,加一个数之类的操作。
lizheng092 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dext 的回复:]
不能用

test[i][j] 吗?
[/Quote]

test是指针,这样用报错。
zhangweiit 2010-05-26
  • 打赏
  • 举报
回复
QVector<QVector <double> * > *fun(QVector<QVector <double> * > *test);
//这里返回的指针,也是指向test的,放在返回值里只是为了使用简便,类似于strcpy


一般指针函数返回的指针,其实都是在调用函数前就已经创建的
zhangweiit 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 lizheng092 的回复:]

顺便再问一个:在函数里,怎样返回一个局部变量的指针或引用?
我在一个函数里有一个QVector<QVector <double> * > test,想返回test里面的数据,这个怎么做方便?直接返回时,由于函数返回时,这个指针就编程悬垂指针了,不能得到正确结果。
[/Quote]

如果要避免野指针问题的话,最好把这个test作为传入参数
void fun(QVector<QVector <double> * > *test);
lizheng092 2010-05-26
  • 打赏
  • 举报
回复
顺便再问一个:在函数里,怎样返回一个局部变量的指针或引用?
我在一个函数里有一个QVector<QVector <double> * > test,想返回test里面的数据,这个怎么做方便?直接返回时,由于函数返回时,这个指针就编程悬垂指针了,不能得到正确结果。
lizheng092 2010-05-26
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 foxyz 的回复:]
(*test)[i][j]
[/Quote]

这个可以,多谢。小弟C++基础不好,以后多多指教!
pcenshao 2010-05-26
  • 打赏
  • 举报
回复
*test[i][j]
zhangweiit 2010-05-26
  • 打赏
  • 举报
回复
<template T>
T *vpos(QVector<QVector<T>> *v,size_t i,size_t j)
zhangweiit 2010-05-26
  • 打赏
  • 举报
回复
除非楼主专门写个函数
<template T>
T *vpos(QVector<QVector<T>>,size_t i,size_t j)
zhangweiit 2010-05-26
  • 打赏
  • 举报
回复
test->value(i)[j]
个人觉得,这样已经比较简单了,毕竟这是一个二维数组,而且又是指针,
dext 2010-05-26
  • 打赏
  • 举报
回复
不能用

test[i][j] 吗?
lizheng092 2010-05-25
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 killua_hzl 的回复:]

C/C++ code
test->at(3).at(3)
[/Quote]

自己试了一下,test->at(i).at(j)为只读;
test->value(i)[j]则可作为左值。感觉这样操作起来挺麻烦的,有没有更简单一点的方法?
  • 打赏
  • 举报
回复
test->at(3).at(3)

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧