C++/VC++编程的疑难问题及解答

2016-01-29 12:25 8 1 收藏

C++/VC++编程的疑难问题及解答,C++/VC++编程的疑难问题及解答

【 tulaoshi.com - C语言心得技巧 】

C++/VC++编程的疑难问题及解答

作者:M. H. Li

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)


  本人在用C++/VC++编程时,遇到的一些比较难以解决的问题,在经过百思得其解之后,总结了一些解决方法,希望这些经验之谈能对大家有所帮助。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) VC问题,编辑框内的换行; C++问题标准程序库的问题,list的迭代器是否可以随机移动? C++问题标准程序库的问题,在删除操作很多的情况下,应该选择什么样的容器? 1、[VC问题] 编辑框内的换行?
答:假设要在编辑框内输出"12345n6789"。首先要设置编辑框的Multiline属性为TRUE,在输出时,除了要加n,还要有r。也就是说,如果要12345和6789在两行显示,需要输出12345rn6789。代码如下:
m_strData = "12345rn67890"; // m_strData是和编辑框关联的变量UpdateData(FALSE); //更新控件
2、[C++标准程序库的问题] list的迭代器是否可以随机移动?
答:由于list的内部实现是双向链表,链表就要求迭代器(指针)只能依次从前向后(或从后向前)移动,依次移动一个位置,因此list只定义了++和--操作符,而没有定义+、-、+=和-=等操作符。所以要想list的迭代器移动一段距离,就需要自己编程实现,用一个小循环就行了,代码如下:
#include <listusing namespace std;list myList;…// myList的初始化及其他操作list::const_iterator itList = myList.begin();// itList向前移动len个距离for ( int i= 0; i < len; i++ ){++itList;}…// 其他操作
3、[C++标准程序库的问题] 在删除操作很多的情况下,应该选择什么样的容器?
答:按照标准程序库的说明,当删除/插入只发生在容器的尾部时,应该使用vector;当删除/插入只发生在容器的首/尾部时,应该使用deque;当删除/插入操作很多,而且删除/插入不是只在容器的首尾,这时应该选择list。
  但是这里也有一个问题,在使用list时,由于其迭代器只能一次移动一个位置,在有大量删除的操作时,需要大量的迭代器移动操作,因此使用list的效率会很低;list的另一个缺点是,占用空间要比同等容量大小的vector要大,这是由于list的实现需要指针,每个元素就多比vector中的元素多两个指针(双向链表),因此在每个元素都很小(几个字节),而且元素数量很大时,使用list就非常浪费空间了。
  如果使用vector,那么删除中间元素会导致大量的元素移动操作,效率也不高,为了解决这个问题,我们可以这样作:使用vector容器,但是不直接删除元素,而是再申请一个临时vector,将原来vector中未删除的有用元素依次加入/保存到临时vector,然后用这个临时vector替换原来的vector,如果实现知道要删除的元素的个数,那么可以事先预留临时vector的空间,再将有用元素存到临时vector中,代码如下:
#include <vectorusing namespace std;vector myVec;…// myVec的初始化以及其它操作vector tempVec;// 删除myVec中的num个元素tempVec.reserve( myVec.size() - num );// 预留临时vector的空间for ( ;; ){将myVec中的有用元素存到tempVec中;}myVec.swap( tempVec );// myVec的容量等于或稍大于myVec.size()…// 其它操作
这只是我目前总结的几个问题,以后遇到问题随时解决,随时总结。

来源:http://www.tulaoshi.com/n/20160129/1486003.html

延伸阅读
标签: 孕前 保健
孩子不长个勿盲目使用保健品 在我们的身边生活着这样一个群体,他们有的十几岁甚至20多岁,正处在青春年华,但身高看起来却如同儿童,甚至幼儿,这就是矮小症患者。我国矮小症患者约有700万,但由于公众对此知晓率低,导致了得到正规治疗的矮小儿童非常少。在近日举办的“中国儿童生长发育健康教育系列活动”启动仪式上,专家...
标签: 电脑入门
Windows7安全 方式 进入和winwindows xp 的操作类似 ,方法 一:开机在进入Windows系统启动画面之前按下F8键;方法 二:启动计算机时按住CTRL键。就会出现 系统多操作启动菜单,这个时辰 你只需要 挑选 SafeMode,就可以 直接进入到安全 方式 了。 1.删除顽固文件 在Windows正常方式 下删除一些文件或许整理 回收站时,系统可以 会提示文件正...
C++语言是一个面向对象的语言,使用C++编写的代码更加简捷、高效,更具可维护性和可重用性。但是很多人使用了C++语言后却感到C++与C编程没有什么区别。这其实是由于对C++语言的特点和特色理解和使用不够造成的。事实上,没有任何一个程序员使用C语言的编程效率可以超过C++语言的。 一、使用new和delete进行动态内存分配和释放 ...
    摘要: 本文主要对匿名管道这种网络通信技术进行了介绍,并对其VC++的实现方法作了介绍。     关键词: 管道;匿名管道;Visual C++ 1 概述 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机。一个进程在向管道写入数据后,另...
工作中经常碰到一些程序,它们在系统启动的过程中,自动打开并运行,以便实现对系统的监控或者病毒的检测等特定的目的,典型的例子就是常用的一些杀毒软件如:KV300及瑞星杀毒软件等。笔者在此,以自己的编程实践为基础,说明这些程序自动启动的原理和方法,同时对一些典型程序代码进行分析,以便读者在今后的编程过程中使用。 一、 ...

经验教程

660

收藏

87
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部