随笔分类 -  STL

摘要:#ifndef __SLINKEDLIST_H__ #define __SLINKEDLIST_H__ #include <new> #include <assert.h> #include <stdio.h> #include <exception> #ifdef _TEST #define TE 阅读全文
posted @ 2015-10-11 12:05 dzqabc 阅读(7) 评论(0) 推荐(0)
摘要:template class Widget; // uses "class"template class Widget; // uses "typename" 答案:没什么不同。在声明一个 template type parameter(模板类型参数)的时候,class 和 typename 意味... 阅读全文
posted @ 2014-10-25 22:16 dzqabc 阅读(2917) 评论(0) 推荐(2)
摘要:错误1: template<class T>void temp(std::vector<T>& container){ std::vector<T>::const_iterator p; //error: expected ‘;’ before ‘p’ for(p = container.begin 阅读全文
posted @ 2014-10-25 21:51 dzqabc 阅读(6846) 评论(0) 推荐(1)
摘要:错误信息为:一个实例化的逻辑错误导致程序中止.在what()函数中不能使用NULL来构造basic_string的对象.错误 用法的演示:============================#include <string>using namespace std;void main(void){//string a(NULL);//错误用法//string b = NULL;//错误用法string a("");//正确用法string b = "";//正确用法string c;//正确用法a = "aaa";b = 阅读全文
posted @ 2012-06-29 23:10 dzqabc 阅读(3466) 评论(0) 推荐(0)
摘要:1、map insert 用于Map 拷贝的正确方式(end()不需要--) map a map b b.insert(a.begin(), a.end()) 其中倘若出现键值重复的数值,则仅插入不重复的. map insert 插入另一个map时 的效率 看了一下VC中内部实现,也只是取出两个迭代器中间值每个执行insert,所以也没有什么效率优化处理2、map中数据插入删除导致map中数据乱掉 可能是自己定义的key类型中的<操作符重载错误,map中的红黑树要求通过<比较操作可以唯一确定一组key的顺序而不受key传入(即insert)顺序影响。因为Map在查找操作中要求该顺序 阅读全文
posted @ 2012-02-21 22:45 dzqabc 阅读(276) 评论(0) 推荐(0)
摘要:迭代器失效 vector: 1.当插入(push_back)一个元素后,end操作返回的迭代器肯定失效。 2.当插入(push_back)一个元素后,capacity返回值与没有插入元素之前相比有改变,则需要重新加载整个容器,此时first和end操作返回的迭代器都会失效。 3.当进行删除操作(er 阅读全文
posted @ 2011-12-18 23:45 dzqabc 阅读(306) 评论(0) 推荐(0)
摘要:序列性容器::(vector) erase迭代器不仅使所有指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器,所以 正确方法为:: for( iter = c.begin(); iter != c.end(); ) iter = c.eras... 阅读全文
posted @ 2011-12-18 22:41 dzqabc 阅读(708) 评论(0) 推荐(0)
摘要:Remove_if的等效操作template < class ForwardIterator, class Predicate > ForwardIterator remove_if ( ForwardIterator first, ForwardIterator last, Predicate pred ){ ForwardIterator result = first; for ( ; first != last; ++first) if (!pred(*first)) *result++ = *first; return result;}删除vector中的数据vector能 阅读全文
posted @ 2011-12-06 23:58 dzqabc 阅读(15310) 评论(3) 推荐(0)
摘要:1、 概念 Scott Meyers在《More Effective C++》中举了个例子,不知你是否还记得?在你还在上学的时候,你的父母要你不要看电视,而去复习功课,于是你把自己关在房间里,做出一副正在复习功课的样子,其实你在干着别的诸如给班上的某位女生写情书之类的事,而一旦你的父母出来在你房间要检查你是否在复习时,你才真正捡起课本看书。这就是“拖延战术”,直到你非要做的时候才去... 阅读全文
posted @ 2011-11-21 22:23 dzqabc 阅读(1199) 评论(0) 推荐(0)
摘要:1、如果用容器存副本,则容器销毁的时候,副本也会自动被删除。如果用容器存指针,则容器销毁的时候,不会删除这些指针所指向的对象,因此必须先手工删除完毕之后,再销毁容器。2、如果用容器存副本,其存入、取出的过程是通过拷贝构造函数和赋值操作符来进行的。如果你没有显式地提供这两者,则使用缺省的拷贝构造函数和赋值操作符,其实现方式为:内存复制。例如:假若你没有提供CFileAttribute::operat... 阅读全文
posted @ 2011-07-13 00:56 dzqabc 阅读(589) 评论(0) 推荐(0)
摘要:在string类之间进行复制没有什么问题。但是要拷贝到内存中时就要注意。一定要在string取出的长度上加1。如下char buf[256];std::string str = "1234567890";memcpy( buf, str.c_str(), str.length()+1 );这样才能拷贝到字符串的结束符‘0’。要不就拷贝不到。string的length函数只计算有效字符的长度。如同C... 阅读全文
posted @ 2011-06-11 02:13 dzqabc 阅读(14353) 评论(0) 推荐(1)
摘要:value="指针与迭代器&*iter的用法 指向数组内元素的指针永远都是迭代器, 迭代器并非总是指针.所有符合标准的迭代器都要求提供operator*(),而且该操作符必须返回一个真正的T&。&*iter将迭代器转型为指针&*iter, 先将迭代器解引用,获得容器内对象的直接引用,然后获取它的地址。 阅读全文
posted @ 2011-05-28 00:26 dzqabc 阅读(6689) 评论(0) 推荐(1)
摘要:templateinline static void Dumpvector(const std::vector &vvector){ std::vector ::iterator pvectorIt = vvector.begin(); for(; pvectorIt != vvector.end(... 阅读全文
posted @ 2011-04-15 00:48 dzqabc 阅读(676) 评论(0) 推荐(0)
摘要:“标准容器中存放引用”与“指向引用的指针(pointer to reference)” 大家都知道,标准容器中是“按值”存放并操纵存放于其中的实例的,不允许在标准容器中存放“引用” 。 vector<int&> a; 编译过后,会出现一大堆的错误,但是我们可以很容易找到“pointer to reference is illegal”之类 的字眼儿,即“指向引用的指针”是非法的:因为容器中很可能有... 阅读全文
posted @ 2011-04-01 00:14 dzqabc 阅读(952) 评论(0) 推荐(0)
摘要:取得std::ostringstream里的内容可以通过str()和str(string&)成员函数。由于str()返回的是临时对象,因而会有如下误用:constchar* pBuffer = oss.str().c_str(); pBuffer指向的内存已被析够! 测试代码:ostringstream oss; oss <<" something you like "<< endl; // can't work! constchar* szData1 = oss.str().c_str(); // work! std::string 阅读全文
posted @ 2011-03-28 22:41 dzqabc 阅读(6915) 评论(3) 推荐(0)
摘要:所有的标准库容器都定义了相应的迭代器类型。迭代器对所有的容器都适用,现代 C++ 程序更倾向于使用迭代器而不是下标操作访问容器元素。1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像(容器均可以++iter,而vector还可以iter-n, iter+n,n为一整型,iter1-iter2:结果是difference_type类型,表两元素的距离.)2.const_iterator 对象可以用于const vector 或非 const vector,它自身的值可以 阅读全文
posted @ 2011-01-14 00:24 dzqabc 阅读(690) 评论(0) 推荐(0)
摘要:STL map和set的使用虽不复杂,但也有一些不易理解的地方,如: 为何map和set的插入删除效率比用其他序列容器高? 为何每次insert之后,以前保存的iterator不会失效? 为何map和set不能像vector一样有个reserve函数来预分配数据? 当数据元素增多时(10000到20000个比较),map和set的插入和搜索速度变化如何?或许有得人能回答出来大概原因,但要彻底明白,还需要了解STL的底层数据结构。C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和 阅读全文
posted @ 2011-01-05 00:02 dzqabc 阅读(2831) 评论(0) 推荐(0)