当前位置:天才代写 > tutorial > C语言/C++ 教程 > C++/VC++编程的疑难问题及解答

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

2017-11-04 08:00 星期六 所属: C语言/C++ 教程 浏览:502

本人在用C++/VC++编程时,碰着的一些较量难以办理的问题,在颠末百思得其解之后,总结了一些办理要领,但愿这些履历之谈能对各人有所辅佐。

1、[VC问题] 编辑框内的换行?

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

m_strData = "12345\r\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()
… // 其它操纵

这只是我今朝总结的几个问题,今后碰着问题随时办理,随时总结。

 

    关键字:

天才代写-代写联系方式