<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AMin2001的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AMin2001</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AMin2001]]></copyright><item><title><![CDATA[自我打印的C程序]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/486561</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/486561</guid><author>AMin2001</author><pubDate>Wed, 21 Sep 2005 16:26:00 +0800</pubDate><description><![CDATA[main(){char* a="main(){char* a=%c%s%c;printf(a,34,a,34);}";printf(a,34,a,34);}运行结果是打印源代码本身注：ASCII的34是"]]></description><category></category></item><item><title><![CDATA[Distance mapping]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/360497</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/360497</guid><author>AMin2001</author><pubDate>Sun, 24 Apr 2005 09:48:00 +0800</pubDate><description><![CDATA[我实现了GPU Gems 2中所说的Distance mapping，效果不错，速度也挺快。放张截图先：]]></description><category></category></item><item><title><![CDATA[Effective STL条款50]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/171139</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/171139</guid><author>AMin2001</author><pubDate>Sun, 07 Nov 2004 15:36:00 +0800</pubDate><description><![CDATA[条款50：让你自己熟悉有关STL的网站因特网充满了STL的信息。用你最喜欢的搜索引擎寻找“STL”，它一定会返回几百个链接，其中有一些可能实际上是相关的。不过，对于大多数STL程序员，没有必要搜寻。下列网站应该要提升到几乎每个人的最常使用列表的顶端：	SGI STL网站，http://www.sgi.com/tech/stl/。	STLport网站，http://www.stlpo]]></description><category></category></item><item><title><![CDATA[Effective STL 条款37]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8079</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8079</guid><author>AMin2001</author><pubDate>Mon, 08 Mar 2004 11:37:00 +0800</pubDate><description><![CDATA[条款37：用accumulate或for_each来统计区间 有时候你需要把整个区间提炼成一个单独的数，或，更一般地，一个单独的对象。对于一般需要的信息，有特殊目的的算法来完成这个任务，比如，count告诉你区间中有多少元素，而count_if告诉你有多少元素满足一个判断式。区间中的最小和最大值可以通过min_element和max_element获得。 但有时，你需要用一些自定义的方式统]]></description><category></category></item><item><title><![CDATA[Effective STL 条款35]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8078</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8078</guid><author>AMin2001</author><pubDate>Mon, 08 Mar 2004 11:32:00 +0800</pubDate><description><![CDATA[条款35：通过mismatch或lexicographical比较实现简单的大小写无关字符串比较一个STL菜鸟最常问的问题是“我怎么使用STL来进行大小写无关的字符串比较？”这是一个令人迷惑的简单问题。大小写无关字符串比较要么真的简单要么真的困难，依赖于你要多一般地解决这个问题。如果你忽略国际化问题而且只关注于设计成字符串strcmp那样的类型，这个任务很简单。如果你要有strcmp不具有]]></description><category></category></item><item><title><![CDATA[Effective STL 条款13]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8077</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8077</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:48:00 +0800</pubDate><description><![CDATA[条款13：尽量使用vector和string来代替动态分配的数组 这一刻，你决定使用new来进行动态分配，你需要肩负下列职责：   你必须确保有的人以后会delete这个分配。如果后面没有delete，你的new就会产生一个资源泄漏。  你必须确保使用了delete的正确形式。对于分配一个单独的对象，必须使用“delete”。对于分配一个数组，必须使用“delete []”。如果使]]></description><category></category></item><item><title><![CDATA[Effective STL 条款28]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8076</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8076</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:48:00 +0800</pubDate><description><![CDATA[条款28：了解如何通过reverse_iterator的base得到iterator 调用reverse_iterator的base成员函数可以产生“对应的”iterator，但这句话有些辞不达意。举个例子，看一下这段代码，我们首先把从数字1-5放进一个vector中，然后产生一个指向3的reverse_iterator，并且通过reverse_iterator的base初始化一个iterat]]></description><category></category></item><item><title><![CDATA[Effective STL 条款27]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8075</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8075</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款27：用distance和advance把const_iterator转化成iterator 条款26中指出有些容器成员函数只接受iterator作为参数，而不是const_iterator。那么，如果你只有一个const_iterator，而你要在它所指向的容器位置上插入新元素呢？也就是如何把const_iterator转化为iterator呢？因为正如条款26所解释的，并不存在从c]]></description><category></category></item><item><title><![CDATA[Effective STL 条款5]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8074</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8074</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款5：尽量使用区间成员函数代替它们的单元素兄弟 快！给定两个vector，v1和v2，使v1的内容和v2的后半部分一样的最简单方式是什么？不要为“当v2有偶数个元素时才有一半”而烦恼，只要做一些合理的东西。时间到！如果你的答案是 v1.assign(v2.begin() + v2.size() /2, v2.end());  或者其他很相似的东西，你就答对了，可以获得金质奖章。如]]></description><category></category></item><item><title><![CDATA[Effective STL 条款26]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8073</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8073</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款26：尽量用iterator代替const_iterator，reverse_iterator和const_reverse_iterator 正如你所知的，每个标准容器类都提供四种迭代器类型。对于container而言，iterator的作用相当于T*，而const_iterator则相当于const T*（你可能也见过T const*这样的写法：它们意思一样[1]）。增加一个iterat]]></description><category></category></item><item><title><![CDATA[Effective STL 条款29]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8072</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8072</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款29：需要一个一个字符输入时考虑使用istreambuf_iterator 假设我们要把一个文本文件拷贝到一个字符串对象中。似乎可以用一种很有道理的方法完成： ifstream inputFile("interestingData.txt");string fileData((istream_iterator(inputFile)),   // 把inputFile读入  ]]></description><category></category></item><item><title><![CDATA[Effective STL 条款40]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8071</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8071</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款40：使仿函数类可适配 假设我有一个Widget*指针的list和一个函数来决定这样的指针是否确定一个有趣的Widget： list widgetPtrs;bool isInteresting(const Widget *pw); 如果我要在list中找第一个指向有趣的Widget的指针，这很简单： list::iterator i = find_if(widg]]></description><category></category></item><item><title><![CDATA[Effective STL 条款39]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8070</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8070</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款39：用纯函数做判断式我讨厌为你做这些，但我们必须从一个简短的词汇课开始：   判断式（predicate）是返回bool（或者其他可以隐式转化为bool的东西）。判断式在STL中广泛使用。标准关联容器的比较函数是判断式，判断式函数常常作为参数传递给算法，比如find_if和多种排序算法。（排序算法的概览可以在条款31找到。）  纯函数是返回值只依赖于参数的函数。如果f是一个纯]]></description><category></category></item><item><title><![CDATA[Effective STL 条款36]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8068</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8068</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:47:00 +0800</pubDate><description><![CDATA[条款36：了解copy_if的正确实现 STL有很多有趣的地方，其中一个是虽然有11个名字带“copy”的算法：          copy    copy_backward          replace_copy    reverse_copy          replace_copy_if    unique_copy    ]]></description><category></category></item><item><title><![CDATA[Effective STL 条款38]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8069</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8069</guid><author>AMin2001</author><pubDate>Fri, 05 Mar 2004 13:36:00 +0800</pubDate><description><![CDATA[条款38：把仿函数类设计为用于值传递C和C++都不允许你真的把函数作为参数传递给其他函数。取而代之的是，你必须传指针给函数。比如，这里有一个标准库函数qsort的声明：void qsort(void *base, size_t nmemb, size_t size,    int (*cmpfcn)(const void*, const void*));条款46解释了为什么sort]]></description><category></category></item><item><title><![CDATA[Effective STL 条款34]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8066</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8066</guid><author>AMin2001</author><pubDate>Wed, 21 Jan 2004 13:28:00 +0800</pubDate><description><![CDATA[条款34：注意哪个算法需要有序区间 不是所有算法可以用于任意区间。比如，remove（参见条款32和33）需要前向迭代器和可以通过这些迭代器赋值的能力。所以，它不能应用于由输入迭代器划分的区间，也不能是map或multimap，也不能是set和multiset的一些实现（参见条款22）。同样，很多排序算法（参见条款31）需要随机访问迭代器，所以不可能在一个list的元素上调用这些算法。如果]]></description><category></category></item><item><title><![CDATA[Effective STL 条款33]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8067</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8067</guid><author>AMin2001</author><pubDate>Wed, 21 Jan 2004 13:27:00 +0800</pubDate><description><![CDATA[条款33：提防在指针的容器上使用类似remove的算法 你在管理一堆动态分配的Widgets，每一个都可能通过检验，你把结果指针保存在一个vector中： class Widget{public: ... bool isCertified() const; // 这个Widget是否通过检验 ...};vector v;   // 建立一个vector然后用]]></description><category></category></item><item><title><![CDATA[Effective STL 条款32]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8065</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8065</guid><author>AMin2001</author><pubDate>Wed, 21 Jan 2004 13:26:00 +0800</pubDate><description><![CDATA[条款32：如果你真的想删除东西的话就在类似remove的算法后接上erase 我将从remove的复习开始这个条款，因为remove是STL中最糊涂的算法。误解remove很容易，驱散所有关于remove行为的疑虑——为什么它这么做，它是怎么做的——是很重要的。 这是remove的声明： templateForwardIterator remove(ForwardIterato]]></description><category></category></item><item><title><![CDATA[Effective STL 条款31]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8064</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8064</guid><author>AMin2001</author><pubDate>Wed, 21 Jan 2004 13:24:00 +0800</pubDate><description><![CDATA[条款31：了解你的排序选择 How can I sort thee? Let me count the ways. 当很多程序员想到排序对象时，只有一个算法出现在脑海：sort。（有些程序员想到qsort，但一旦他们看了条款46，他们会放弃qsort的想法并用sort的想法取代之。） 现在，sort是一个令人称赞的算法，但如果你不需要你就没有必要浪费表情。有时候你不需要完全排序。比如，]]></description><category></category></item><item><title><![CDATA[Effective STL 条款30]]></title><link>https://blog.youkuaiyun.com/AMin2001/article/details/8063</link><guid>https://blog.youkuaiyun.com/AMin2001/article/details/8063</guid><author>AMin2001</author><pubDate>Wed, 21 Jan 2004 13:24:00 +0800</pubDate><description><![CDATA[条款30：确保目标区间足够大STL容器在被添加时（通过insert、push_front、push_back等）自动扩展它们自己来容纳新对象。这工作的很好，有些程序员因为这个信仰而被麻痹，认为他们不必担心要为容器中的对象腾出空间，因为容器自己可以照顾好这些。如果是那样就好了！当程序员想向容器中插入对象但并没有告诉STL他们所想的时，问题出现了。这是一个常见的可以自我表现的方法：int ]]></description><category></category></item></channel></rss>