QVector<QString> 显示动态数组里面的元素用QString和char *的转换

QVector类是一个提供动态数组的模板类。

QVector<T>是Qt普通容器类的一种。它将自己的每一个对象存储在连续的内存中,可以使用索引号来快速访问它们。QList<T>、QLinkedList<T>和
QVarLengthArray<T>也提供了相似的功能,它们使用方法如下:

l QList一般用得最多,它能满足我们绝大部分需求。像prepend()和insert()这样的操作通常比QVector要快些,这是由于QList存储它的对象的方式(Algorithmic Complexity)不同。还有它基于索引的API比QLinkedList的基于迭代器的API更方便使用。最后,执行程序时它的代码扩展量更少些。

l QLinkedList,当你需要使用一个真正的链表,要求在恒定的时间内将对象插入到列表的中间,你更想用迭代器而不是索引号来访问对象,这个时候就使用QLinkedList吧!

l QVector,如果你想要在连续的内存上存储你的对象,你的对象比指针还要大,你想避免单独地把对象插入到堆的头部时,使用QVector。

l QVarLengthArray,如果你想要一个低层次的可变大小的容器,QVarLengthArray就足够了,它的优点是速度快!

下面是使用QVector存放整型值和QString的例子:

QVector<int> integerVector;

QVector<QString> stringVector;

QVector保存对象的向量容器,通常是使用初始大小来创建向量容器。举例,下面的代码构造了一个拥有200个元素的QVector:

QVector<QString> vector(200);

如果所创建的向量容器对象没有赋初值,就会被使用这个向量容器的类的默认构造函数进行初始化。基本类型和指针类型都会被初始化为0,如果想使用其它的初值来初始化对象时,可以在初始化时再添加一个参数:

QVector<QString> vector(200,"Pass");

你也可以调用fill()函数在任何时候填充向量容器。

但是当你要显示里面的具体字符串的时候

在Qt开发中,QString通过toAscii().data()转换为char *类型

QByteArray QString::toAscii () const

Returns an 8-bit representation of the string as a QByteArray.

If a codec has been set using QTextCodec::setCodecForCStrings(), it is used to convert Unicode to 8-bit char; otherwise this function does the same as toLatin1().

Note that, despite the name, this function does not necessarily return an US-ASCII (ANSI X3.4-1986) string and its result may not be US-ASCII compatible.

如果使用setCodecForCStrings函数设置过编码的话,toAscii会把Unicode转换为8位的char类型,否则与toLatin1相同。

时间: 2024-10-07 06:32:22

QVector<QString> 显示动态数组里面的元素用QString和char *的转换的相关文章

[转]delphi 删除动态数组的指定元素

type TArr = array of TPoint; {把数组先定义成一个类型会方便许多, 这里仅用 TPoint 测试} {删除动态数组指定元素的过程: 参数 arr 是数组名, 参数 Index 是要删除的索引} procedure DeleteArrItem(var arr: TArr; Index: Integer); var Count: Cardinal; begin Count := Length(arr); if (Count = 0) or (Index < 0) or (

动态数组vector

动态数组 动态数组可以实现长度的自由变化,但是通过vector的默认值可以基本判断所谓动态数组实际上还是一个普通数组,传递一个参数确定数组长度,如果没有传递参数,程序中其实默认进行设定.如果插入数据之后超过了已有长度,则在内部进行了一个创建第三方的过程,将现在的数组保存起来,然后再次创建一个新的长度的数组,然后根据插入值进行重新整合. 笔者并未看过源码,只是按照功能试着进行实现. 1.array.h 1 #pragma once 2 3 #include <iostream> 4 using

[VBS]脚本中的字典、动态数组、队列和堆栈

今天用VBS脚本写了几个程序,用到了字典(Dictionary).动态数组(ArrayList).队列(Queue)和堆栈(Stack).现在写篇Blog总结一下 :-) 1.编写环境 今天突发奇想下载了个gVim来写VBS脚本,我用的版本是7.4的 在写脚本前,需要在gVim的安装根目录下,找到文件“_vimrc”,在里面添加下面三行: set number set softtabstop=4 set tabstop=4 意思分别是“显示行号”.“按退格键一次删掉4个空格”和“设定Tab长度为

C++ Primer 笔记——动态数组

1.动态数组定义时也需要指明数组的大小,但是可以不是常量. int i; int arr[i]; // 错误,数组的大小必须为常量 int *p = new int[i]; // 正确,大小不必是常量 2.虽然我们通常称 new T[ ] 分配的内存为动态数组,但我们并未得到一个数组类型的对象,而是得到一个数组元素类型的指针.所以不能对动态数组调用begin或end,也不能用for语句来处理动态数组中的元素. 3.默认情况下,new分配的对象,不管是单个分配的还是数组中的,都是默认初始化的.我们

简单动态数组的实现代码

以下是本人动态数组实现的源代码,仅供参考,不足之处请指正: import java.util.*; public class My_List implements Collection{ /***************************************************************/ //测试模块 //主方法,测试用 public static void main(String [] args){ /* My_List ma = new My_List(); /

C#动态数组ArrayList和List&lt;T&gt;的比较

C#中一维动态数组(即列表)分ArrayList和List<T>两种,其容量可随着我们的需要自动进行扩充 一.ArrayList类(少用) ArrayList位于System.Collections命名空间中,所以我们在使用时,需要导入此命名空间 ArrayList里边的数据类型是object,它类似于向量,可以存储不同的数据类型在一个数组里边(转换为了object) 下面是ArrayList的声明: ArrayList list = new ArrayList(); //声明一个ArrayL

线性表之顺序存储结构(C语言动态数组实现)

线性表的定义:N个数据元素的有限序列 线性表从存储结构上分为:顺序存储结构(数组)和 链式存储结构(链表) 顺序存储结构:是用一段连续的内存空间存储表中的数据 L=(a1,a2,a3....an) 链式存储结构:是用一段一段连续的内存空间存储表中每一行的数据,段与段之间通过一个引用(指针)相互连接来,形成一个链式的存储结构 看到顺序存储结构的图示,我们可能会马上联想到C语言的数组.是的,数组就是一种典型的顺序存储数据结构.下面我通过一个实例,来实现对顺序存储结构中的数据增.删.改.查的操作. 首

c++动态数组vector

(这篇随笔主要和大家分享一下在信竞中c++中动态数组vector的用法,那些跟竞赛没毛关系的就不说了..) 相信大家都知道c++里有一个nb的STL模板库..(在这里膜一下STL) 今天我们就要扯一扯这里面的一个容器:动态数组vector. vector实际上类似于a[]这个东西,也就是说它重载了[]运算符.(真是66666666) 使用vector时需要加上<vector>这个头文件. 定义方法:vector <类型名> 变量名; 例: vector <int> a;

【足迹C++primer】40、动态数组

动态数组 C++语言定义了另外一种new表达式语法,可以分配并初始化一个对象数组.标准库中包含 一个名为allocator的类,允许我们将分配和初始化分离. 12.2.1 new和数组 void fun1() { int *pia=new int[2]; //pia指向第一个int //方括号中的大小必须是整型,但不必是常量 typedef int arrT[42]; //arrT表示42个int的数组类型 int *p=new arrT; //分配一个42个int的数组:p指向第一个int /