C++/VC++编程的疑难问题及解答(二),C++/VC++编程的疑难问题及解答(二)
【 tulaoshi.com - C语言心得技巧 】
C++/VC++编程的疑难问题及解答(二)
作者:M. H. Li
我“C++/VC++编程的疑难问题及解答”给出了三个关于C++/VC++编程的问题及其可能的解决方法。这篇文章再给出几个问题,大家多给我提意见啊,有问题可以给我发信啊!
(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)标准程序库问题,再谈list的迭代器是否可以随机移动? 标准程序库问题,vector的resize()和reserve()函数的区别 标准程序库问题,vector的内存重分配问题 动态链接库与静态链接库标准程序库问题,再谈list的迭代器是否可以随机移动?
上篇文章中的"list的迭代器是否可以随机移动?"问题的回顾:
由于list的内部实现是双向链表,链表就要求迭代器(指针)只能依次从前向后(或从后向前)移动,依次移动一个位置,因此list只定义了++和--操作符,而没有定义+、-、+=和-=等操作符。所以要想list的迭代器移动一段距离,就需要自己编程实现,用一个小循环就行了,代码如下:
#include <listusing namespace std;list<int myList;…// myList的初始化及其他操作list<int::const_iterator itList = myList.begin();// itList向前移动len个距离for ( int i= 0; i < len; i++ ){++itList;}...// 其他操作上面对STL中的list的指针随机移动问题的解释不是很好,感谢周星星的提醒,我们可以用STL的advance操作,我给出的代码的是advance针对list的一个可能的实现方法。这里我建议使用advance操作代替我的那段代码。
vector<int myVec;myVec.reserve( 100 );//新元素还没有构造for (int i = 0; i < 100; i++ ){myVec.push_back( i ); //新元素这时才构造}myVec.resize( 102 );// 用元素的默认构造函数构造了两个新的元素myVec[100] = 1;//直接操作新元素myVec[101] = 2;…标准程序库问题,vector的内存重分配问题
struct ForwardProb{string m_SS;string m_dictItem;int m_index;float m_forwardProb;ForwardProb *preFP;};vector<ForwardProb myVec;for ( int i = 0; i < count; i++ ){ForwardProb thisFP;…thisFP-preFP = some previous pointer in myVec;myVec.push_back( thisFP );}…在这段代码中,由于每次thisFP都是新加入myVec中的,这样可能需要重新分配内存,即myVec在内存中的位置就可能发生了变化,那么每个元素中的指针preFP就可能变得无效了。
来源:http://www.tulaoshi.com/n/20160129/1485956.html
看过《C++/VC++编程的疑难问题及解答(二)》的人还看了以下文章 更多>>