| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 编程开发 > CC++教程 > 文章正文 用户登录
[征文]叶子西西网
[征文]叶子西西网
主页的设计+[收藏
Visual C++实现Fl
再谈在VB中调用VC
Visaul C++6.0中使
Visual C++编程技
Visual C++编程技
Visual C++编程技
Visual C++编程技

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

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

作者:佚名 来源:网易社区 更新:2006-8-25 21:05:35 错误报告 我要投稿

1、[VC问题] 编辑框内的换行?
答:假设要在编辑框内输出"12345\n6789"。首先要设置编辑框的Multiline属性为TRUE,在输出时,除了要加\n,还要有\r。也就是说,如果要12345和6789在两行显示,需要输出12345\r\n6789。代码如下:

m_strData = "12345\n67890";   // m_strData是和编辑框关联的变量
UpdateData(FALSE);     //更新控件

2、[C++标准程序库的问题] list的迭代器是否可以随机移动?
答:由于list的内部实现是双向链表,链表就要求迭代器(指针)只能依次从前向后(或从后向前)移动,依次移动一个位置,因此list只定义了++和--操作符,而没有定义+、-、+=和-=等操作符。所以要想list的迭代器移动一段距离,就需要自己编程实现,用一个小循环就行了,代码如下:

#include <list>
using 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 <vector>
using namespace std;
vector myVec;
…     // myVec的初始化以及其它操作
vector tempVec;
     // 删除myVec中的num个元素
tempVec.reserve( myVec.size() - num ); // 预留临时vector的空间
for ( ;; )
{
 将myVec中的有用元素存到tempVec中;
}
myVec.swap( tempVec ); // myVec的容量等于或稍大于myVec.size()
…   // 其它操作

这只是我目前总结的几个问题,以后遇到问题随时解决,随时总结。

文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。