﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-pzz-文章分类-c++基本常识</title><link>http://www.cppblog.com/panzhizhou/category/20853.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 15 Apr 2014 23:07:06 GMT</lastBuildDate><pubDate>Tue, 15 Apr 2014 23:07:06 GMT</pubDate><ttl>60</ttl><item><title>vector基本内存问题</title><link>http://www.cppblog.com/panzhizhou/articles/vector.html</link><dc:creator>pzz</dc:creator><author>pzz</author><pubDate>Tue, 15 Apr 2014 02:58:00 GMT</pubDate><guid>http://www.cppblog.com/panzhizhou/articles/vector.html</guid><wfw:comment>http://www.cppblog.com/panzhizhou/comments/206592.html</wfw:comment><comments>http://www.cppblog.com/panzhizhou/articles/vector.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/panzhizhou/comments/commentRss/206592.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/panzhizhou/services/trackbacks/206592.html</trackback:ping><description><![CDATA[当一个结构体数组大小大概为5000的样子就超出内存，vector底层实现机制是基于deque的，下面是简短的一个关于vector的简短描述。<br /><p style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">1.vector<br />vector就是动态数组.它也是在堆中分配内存,元素连续存放,有保留内存,如果减少大小后，内存也不会释放.如果新值&gt;当前大小时才会再分配内存.<br />它拥有一段连续的内存空间，并且起始地址不变，因此它能非常好的支持随即存取，即[]操作符，但由于它的内存空间是连续的，所以在中间进行插入和删除会造成内存块的拷贝，另外，当该数组后的内存空间不够时，需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。<br /><br />对最后元素操作最快(在后面添加删除最快 ), 此时一般不需要移动内存,只有保留内存不够时才需要<br /><br />对中间和开始处进行添加删除元素操作需要移动内存,如果你的元素是结构或是类,那么移动的同时还会进行构造和析构操作，所以性能不高 （最好将结构或类的指针放入vector中，而不是结构或类本身，这样可以避免移动时的构造与析构)。<br />访问方面,对任何元素的访问都是O(1),也就是是常数的,所以vector常用来保存需要经常进行随机访问的内容,并且不需要经常对中间元素进行添加删除操作.<br />相比较可以看到vector的属性与string差不多,同样可以使用capacity看当前保留的内存,使用swap来减少它使用的内存.<br />capacity()返回vector所能容纳的元素数量(在不重新分配内存的情况下）      测试push_back  1000个数据  capacity返回16384<br /><br />总结<br />需要经常随机访问请用vector<br /></p><hr /><p style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">参考文章：<a href="http://blog.csdn.net/lmh12506/article/details/8445025">http://blog.csdn.net/lmh12506/article/details/8445025</a><br />在这个程序里，我用了结构体，所以每次申请内存时会调用构造函数，造成效率不高。<br /></p><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">1</span>&nbsp;<span style="color: #0000FF; ">struct</span>&nbsp;milk{<br /><span style="color: #008080; ">2</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;percost;<br /><span style="color: #008080; ">3</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">int</span>&nbsp;facmount;<br /><span style="color: #008080; ">4</span>&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">bool</span>&nbsp;<span style="color: #0000FF; ">operator</span>&nbsp;&lt;(<span style="color: #0000FF; ">const</span>&nbsp;milk&nbsp;&amp;m1)&nbsp;<span style="color: #0000FF; ">const</span>{<br /><span style="color: #008080; ">5</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;percost&lt;m1.percost;<br /><span style="color: #008080; ">6</span>&nbsp;&nbsp;&nbsp;}<br /><span style="color: #008080; ">7</span>&nbsp;};</div><p style="color: #454545; font-family: tahoma, helvetica, arial; background-color: #ffffff; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px;">在这样的情况下，能够确定大小的还是定义一个静态数组比较好。<br /><br /></p><img src ="http://www.cppblog.com/panzhizhou/aggbug/206592.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/panzhizhou/" target="_blank">pzz</a> 2014-04-15 10:58 <a href="http://www.cppblog.com/panzhizhou/articles/vector.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>