1.C++ STL ä¹æ以å¾å°å¹¿æ³çèµèªï¼ä¹è¢«å¾å¤äººä½¿ç¨ï¼ä¸åªæ¯æä¾äºåvector, string, listçæ¹ä¾¿ç容å¨ï¼æ´éè¦çæ¯STLå°è£
äºè®¸å¤å¤æçæ°æ®ç»æç®æ³å大é常ç¨æ°æ®ç»ææä½ãvectorå°è£
æ°ç»ï¼listå°è£
äºé¾è¡¨ï¼mapåsetå°è£
äºäºåæ ç
2.æ åå
³è容å¨set, multiset, map, multimapå
é¨éç¨çå°±æ¯ä¸ç§é常é«æç平衡æ£ç´¢äºåæ ï¼çº¢é»æ ï¼ä¹æ为RBæ (Red-BlackTree)ãRBæ çç»è®¡æ§è½è¦å¥½äºä¸è¬ç 平衡äºåæ
3.STL mapåsetç使ç¨è½ä¸å¤æï¼ä½ä¹æä¸äºä¸æç解çå°æ¹ï¼å¦ï¼
map: type pair <constKey, T> ï¼å¾å¤ä¸åç const Key 对åºç T 对象çä¸ä¸ªéåï¼ææçè®°å½éä¸åªè¦ const Key ä¸ä¸æ ·å°±å¯ä»¥ï¼ T æ å
³ï¼ set: type const Key. åªååä¸ç对 const Key ï¼æ²¡æ map ç T 对åï¼å¯ä»¥çæ map çä¸ä¸ªç¹ä¾
ï¼1ï¼ä¸ºä½mapåsetçæå
¥å é¤æçæ¯ç¨å
¶ä»åºå容å¨é«ï¼ï¼æ
çï¼å 为对äºå
³è容å¨æ¥è¯´ï¼ä¸éè¦åå
åæ·è´åå
å移å¨ã说对äºï¼ç¡®å®å¦æ¤ãmapåset容å¨å
ææå
ç´ é½æ¯ä»¥èç¹çæ¹å¼æ¥åå¨ï¼å
¶èç¹ç»æåé¾è¡¨å·®ä¸å¤ï¼æåç¶èç¹ååèç¹
ï¼2ï¼ä¸ºä½æ¯æ¬¡insertä¹åï¼ä»¥åä¿åçiteratorä¸ä¼å¤±æï¼
çï¼iteratorè¿éå°±ç¸å½äºæåèç¹çæéï¼å
å没æåï¼æåå
åçæéæä¹ä¼å¤±æå¢(å½ç¶è¢«å é¤çé£ä¸ªå
ç´ æ¬èº«å·²ç»å¤±æäº)ãç¸å¯¹äºvectoræ¥è¯´ï¼æ¯ä¸æ¬¡å é¤åæå
¥ï¼æéé½æå¯è½å¤±æï¼è°ç¨push_backå¨å°¾é¨æå
¥ä¹æ¯å¦æ¤ãå 为为äºä¿è¯å
é¨æ°æ®çè¿ç»åæ¾ï¼iteratoræåçé£åå
åå¨å é¤åæå
¥è¿ç¨ä¸å¯è½å·²ç»è¢«å
¶ä»å
åè¦çæè
å
åå·²ç»è¢«éæ¾äºãå³ä½¿æ¶push_backçæ¶åï¼å®¹å¨å
é¨ç©ºé´å¯è½ä¸å¤ï¼éè¦ä¸åæ°çæ´å¤§çå
åï¼åªææ以åçå
åéæ¾ï¼ç³è¯·æ°çæ´å¤§çå
åï¼å¤å¶å·²æçæ°æ®å
ç´ å°æ°çå
åï¼æåæéè¦æå
¥çå
ç´ æ¾å°æåï¼é£ä¹ä»¥åçå
åæéèªç¶å°±ä¸å¯ç¨äºãç¹å«æ¶å¨åfindçç®æ³å¨ä¸èµ·ä½¿ç¨çæ¶åï¼ç¢è®°è¿ä¸ªååï¼ä¸è¦ä½¿ç¨è¿æçiteratorã
ï¼3ï¼ä¸ºä½mapåsetä¸è½åvectorä¸æ ·æ个reserveå½æ°æ¥é¢åé
æ°æ®ï¼
çï¼æ以åä¹è¿ä¹é®ï¼ç©¶å
¶åçæ¥è¯´æ¶ï¼å¼èµ·å®çåå å¨äºå¨mapåsetå
é¨åå¨çå·²ç»ä¸æ¯å
ç´ æ¬èº«äºï¼èæ¯å
å«å
ç´ çèç¹ãä¹å°±æ¯è¯´mapå
é¨ä½¿ç¨çAlloc并ä¸æ¯map<Key, Data, Compare, Alloc>声æçæ¶åä»åæ°ä¸ä¼ å
¥çAllocãä¾å¦ï¼
4.set, multiset
setåmultisetä¼æ ¹æ®ç¹å®çæåºååèªå¨å°å
ç´ æåºï¼setä¸å
ç´ ä¸å
许éå¤ï¼multisetå¯ä»¥éå¤ã
å 为æ¯æåºçï¼æ以setä¸çå
ç´ ä¸è½è¢«ä¿®æ¹ï¼åªè½å é¤ååæ·»å ã
åsetä¸æ·»å çå
ç´ ç±»åå¿
é¡»éè½½<æä½ç¬¦ç¨æ¥æåºãæåºæ»¡è¶³ä»¥ä¸ååï¼
1ãé对称ï¼è¥A<B为çï¼åB<A为åã
2ãå¯ä¼ éï¼è¥A<B,B<Cï¼åA<Cã
3ãA<Aæ°¸è¿ä¸ºåã
setä¸å¤æå
ç´ æ¯å¦ç¸çï¼
if(!(A<B || B<A))ï¼å½A<BåB<Aé½ä¸ºåæ¶ï¼å®ä»¬ç¸çã
5.mapï¼multimap
mapåmultimapå°keyåvalueç»æçpairä½ä¸ºå
ç´ ï¼æ ¹æ®keyçæåºååèªå¨å°å
ç´ æåºï¼mapä¸å
ç´ çkeyä¸å
许éå¤ï¼multimapå¯ä»¥éå¤ã
map<key,value>
å 为æ¯æåºçï¼æ以mapä¸å
ç´ çkeyä¸è½è¢«ä¿®æ¹ï¼åªè½å é¤ååæ·»å ãkey对åºçvalueå¯ä»¥ä¿®æ¹ã
åmapä¸æ·»å çå
ç´ çkeyç±»åå¿
é¡»éè½½<æä½ç¬¦ç¨æ¥æåºãæåºä¸setè§åä¸è´ã
6. Listçåè½æ¹æ³
å®é
ä¸æ两ç§List: ä¸ç§æ¯åºæ¬çArrayList,å
¶ä¼ç¹å¨äºéæºè®¿é®å
ç´ ï¼å¦ä¸ç§æ¯æ´å¼ºå¤§çLinkedList,å®å¹¶ä¸æ¯ä¸ºå¿«ééæºè®¿é®è®¾è®¡çï¼èæ¯å
·æä¸å¥æ´éç¨çæ¹æ³ã
List : 次åºæ¯Listæéè¦çç¹ç¹ï¼å®ä¿è¯ç»´æ¤å
ç´ ç¹å®ç顺åºãList为Collectionæ·»å äºè®¸å¤æ¹æ³ï¼ä½¿å¾è½å¤åListä¸é´æå
¥ä¸ç§»é¤å
ç´ (è¿åªæ¨èLinkedList使ç¨ã)ä¸ä¸ªListå¯ä»¥çæListIterator,使ç¨å®å¯ä»¥ä»ä¸¤ä¸ªæ¹åéåList,ä¹å¯ä»¥ä»Listä¸é´æå
¥å移é¤å
ç´ ã
ArrayList : ç±æ°ç»å®ç°çListãå
许对å
ç´ è¿è¡å¿«ééæºè®¿é®ï¼ä½æ¯åListä¸é´æå
¥ä¸ç§»é¤å
ç´ çé度å¾æ
¢ãListIteratoråªåºè¯¥ç¨æ¥ç±åååéåArrayList,èä¸æ¯ç¨æ¥æå
¥å移é¤å
ç´ ãå 为é£æ¯LinkedListå¼éè¦å¤§å¾å¤ã
LinkedList : 对顺åºè®¿é®è¿è¡äºä¼åï¼åListä¸é´æå
¥ä¸å é¤çå¼é并ä¸å¤§ãéæºè®¿é®åç¸å¯¹è¾æ
¢ã(使ç¨ArrayList代æ¿ã)è¿å
·æä¸åæ¹æ³ï¼addFirst(), addLast(), getFirst(),getLast(), removeFirst() å removeLast(), è¿äºæ¹æ³ (没æå¨ä»»ä½æ¥å£æåºç±»ä¸å®ä¹è¿)使å¾LinkedListå¯ä»¥å½ä½å æ ãéååååéå使ç¨
7..1 hash_mapåmapçåºå«å¨åªéï¼
æé å½æ°ãhash_mapéè¦hashå½æ°ï¼çäºå½æ°ï¼mapåªéè¦æ¯è¾å½æ°(å°äºå½æ°).
åå¨ç»æãhash_mapéç¨hash表åå¨ï¼mapä¸è¬éç¨ çº¢é»æ (RB Tree) å®ç°ãå æ¤å
¶memoryæ°æ®ç»ææ¯ä¸ä¸æ ·çã
7.2 ä»ä¹æ¶åéè¦ç¨hash_mapï¼ä»ä¹æ¶åéè¦ç¨map?
æ»ä½æ¥è¯´ï¼hash_map æ¥æ¾é度ä¼æ¯mapå¿«ï¼èä¸æ¥æ¾é度åºæ¬åæ°æ®æ°æ®é大å°ï¼å±äºå¸¸æ°çº§å«;èmapçæ¥æ¾é度æ¯log(n)级å«ã并ä¸ä¸å®å¸¸æ°å°±æ¯log(n)å°ï¼hashè¿æhashå½æ°çèæ¶ï¼æç½äºå§ï¼å¦æä½ èèæçï¼ç¹å«æ¯å¨å
ç´ è¾¾å°ä¸å®æ°é级æ¶ï¼èèèèhash_mapãä½è¥ä½ 对å
å使ç¨ç¹å«ä¸¥æ ¼ï¼å¸æç¨åºå°½å¯è½å°æ¶èå
åï¼é£ä¹ä¸å®è¦å°å¿ï¼hash_mapå¯è½ä¼è®©ä½ é·å
¥å°´å°¬ï¼ç¹å«æ¯å½ä½ çhash_map对象ç¹å«å¤æ¶ï¼ä½ å°±æ´æ æ³æ§å¶äºï¼èä¸hash_mapçæé é度è¾æ
¢ã
ç°å¨ç¥éå¦ä½éæ©äºåï¼æè¡¡ä¸ä¸ªå ç´ : æ¥æ¾é度, æ°æ®é, å
å使ç¨ã
8.ä¸äºä½¿ç¨ä¸ç建议ï¼
Level 1 - ä»
ä»
ä½ä¸ºMap使ç¨ï¼éç¨éææ°ç»
Level 2 - ä¿åå®é¿æ°æ®ï¼ä½¿ç¨æ¶ä¹æ¯å
¨é¨éåï¼éç¨å¨ææ°ç»ï¼é¿åº¦ä¸å¼å§å°±åºå®çè¯éææ°ç»ä¹è¡ï¼
Level 3 - ä¿åä¸å®é¿æ°ç»ï¼éè¦å¨æå¢å çè½åï¼ä¾§éäºå¯»æ¾æ°æ®çé度ï¼éç¨vector
Level 3 - ä¿åä¸å®é¿æ°ç»ï¼éè¦å¨æå¢å çè½åï¼ä¾§éäºå¢å å é¤æ°æ®çé度ï¼éç¨list
Level 4 - 对æ°æ®æå¤ææä½ï¼å³éè¦ååå¢å æ°æ®çè½åï¼åè¦è¯å¥½çæ°æ®è®¿é®é度ï¼éç¨deque
Level 5 - 对æ°æ®ä¸é´çå¢å æä½æ¯è¾å¤ï¼éç¨listï¼å»ºè®®å¨æåºçåºç¡ä¸ï¼æ¹éè¿è¡å¢å å¯ä»¥å¯¹è¿è¡æçæä¾æ大çä¿è¯
Level 6 - ä¸è¿°ä¸æ¾ä¸å°éåçï¼ç»åSTL容å¨æè
èªå·±å»ºç«ç¹æ®çæ°æ®ç»ææ¥å®ç°
9.
(1).vector - ä¼èªå¨å¢é¿çæ°ç»
vector<int>vec(10) //ä¸ä¸ªæ10个intå
ç´ ç容å¨
vector<float> vec(10, 0.5)//ä¸ä¸ªæ10个floatå
ç´ ç容å¨ï¼å¹¶ä¸ä»ä»¬å¾å¼é½æ¯0.5
vector<int>::iterator iter;
for(iter = vec.begin(); iter != vec.end(); iter++)
{
//. . . . . . .
}
vectorç±äºæ°ç»çå¢é¿åªè½ååï¼æ以ä¹åªæä¾äºå端æå
¥åå端å é¤ï¼
ä¹å°±æ¯push_backåpop_backãå½ç¶å¨å端åä¸é´è¦æä½æ°æ®ä¹æ¯å¯ä»¥çï¼
ç¨insertåeraseï¼ä½æ¯å端åä¸é´å¯¹æ°æ®è¿è¡æä½å¿
ç¶ä¼å¼èµ·æ°æ®åç移å¨ï¼
è¿å¯¹æ§è½å½±åæ¯é常大çã
æ大çä¼å¿å°±æ¯éæºè®¿é®çè½åã
vector<T1>::iteratorç¸å
³çæ¹æ³æï¼
begin()ï¼ç¨æ¥è·å¾ä¸ä¸ªæåvector第ä¸ä¸ªå
ç´ çæé
end()ï¼ç¨æ¥è·å¾ä¸ä¸ªæåvectoræåä¸ä¸ªå
ç´ ä¹åçé£ä¸ªä½ç½®çæéï¼æ³¨æä¸æ¯æåæåä¸ä¸ªå
ç´ ã
erase(vector<T1>::iterator)ï¼ç¨æ¥å é¤ä½ä¸ºåæ°æä¼ å
¥çé£ä¸ªiteratorææåçé£ä¸ªå
ç´ ã
(2).list - æ
é¿æå
¥å é¤çé¾è¡¨
list<string>Milkshakes; list<int> Scores;
push_back, pop_backpush_front. pop_front
listæ¯ä¸ä¸ªååé¾è¡¨çå®ç°ã
为äºæä¾ååéåçè½åï¼listè¦æ¯ä¸è¬çæ°æ®åå
å¤åºä¸¤ä¸ªæåååçæé
ä¸ä¸ªä½¿ç¨iteratoræ¥å é¤å
ç´ çä¾å
list<string> stringList;
list<string>::iterator iter;
advance(iter, 5); //å°iteratoræåstringListç第äºä¸ªå
ç´
stringList.erase(iterator);//å é¤
é£ä¹å é¤æä½è¿è¡ä»¥åï¼ä¼ å
¥erase()æ¹æ³çiteratoræååªéäºå¢ï¼å®æåäºå é¤æä½åææåçé£ä¸ªå
ç´ çåä¸ä¸ªå
ç´ ã
(3).deque - æ¥ævectorålist两è
ä¼ç¹çå端éå
(4)ï¼è¿ä¸ä¸ªæ¨¡æ¿çæ»ç» æ¯è¾åä¸è¬ä½¿ç¨åå
è¿ä¸ä¸ªæ¨¡æ¿é½å±äºåºå类模æ¿ï¼å¯ä»¥çå°ä»ä»¬æä¸äºéç¨æ¹æ³
size():å¾å°å®¹å¨å¤§å°
begin():å¾å°æå容å¨å
第ä¸ä¸ªå
ç´ çæéï¼è¿ä¸ªæéçç±»åä¾å®¹å¨çä¸åèä¸åï¼
end():å¾å°æå容å¨å
æåä¸ä¸ªå
ç´ ä¹åä¸ä¸ªä½ç½®çæé
erase():å é¤ä¼ å
¥æéæåçé£ä¸ªå
ç´
clear():æ¸
é¤ææçå
ç´
ï¼ï¼è¿ç®ç¬¦ï¼å¤æ两个容å¨æ¯å¦ç¸ç
ï¼è¿ç®ç¬¦ï¼ç¨æ¥ç»å®¹å¨èµå¼
ä¸é¢çä¸ä¸ªæ¨¡æ¿æåèªçç¹ç¹
vector模æ¿çæ°æ®å¨å
åä¸è¿ç»çæåï¼æ以éæºååå
ç´ ï¼å³éè¿[]è¿ç®ç¬¦ååï¼çé度æå¿«ï¼è¿ä¸ç¹åæ°ç»æ¯ä¸è´çãåæ ·ç±äºå®çè¿ç»æåï¼æ以å®å¨é¤å°¾é¨ä»¥å¤çä½ç½®å é¤ææ·»å å
ç´ çé度å¾æ
¢ï¼å¨ä½¿ç¨vectoræ¶ï¼è¦é¿å
è¿ç§æä½ã
list模æ¿çæ°æ®æ¯é¾å¼åå¨ï¼æ以ä¸è½éæºååå
ç´ ãå®çä¼å¿å¨äºä»»æä½ç½®æ·»å å é¤å
ç´ çé度ã
deque模æ¿æ¯éè¿é¾æ¥è¥å¹²çè¿ç»çæ°æ®å®ç°çï¼æ以åè¡¡äºä»¥ä¸ä¸¤ä¸ªå®¹å¨çç¹ç¹
温馨提示:内容为网友见解,仅供参考
C++实习生面试,一般会问到关于STL的什么知识点
1.C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。vector封装数组,list封装了链表,map和set封装了二叉树等 2.标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效...
明天面试要考STL,我该注意些什么
1.具体说明STL如何实现vector vector的内部是使用动态数组的方式来实现的,如果动态数组的内部实现不够用,就要动态的重新分配内存。然后把原数组的内容拷贝过去。2.vector和list的区别 vector和数组类似,拥有连续的内存空间,支持随机的存取,在中间进行元素的插入和删除的操作时间复杂度是O(n)list是由双向...
公司招聘C++工程师一般要求掌握什么
1、C++的基本常识:比如引用和指针的区别,const的各种情况的含义,面向对象的编程的多态,C++的RTTI等,这些基本内容要有了解。2、看看是否有C++的开发经验,开发过什么项目,会希望给出一些描述。3、配套的操作系统方面的知识。4、我们公司STL用的非常多,所以也会问问应试的人对STL的掌握程度。5、一般...
C++面试八股文:std::deque用过吗?
deque通常维护了一个map(不是std::map),map的每个元素指向一个固定大小的chunk。同时维护了两个指针,指向头chunk和尾chunk。在deque的头部或尾部插入元素时,deque会找到头部或尾部的指针,并通过指针找到对应的chunk。如果chunk中还有未被元素填充的位置,则将元素填充到数组中,如果此指针指向的chunk已...
深入了解 C++ 中的 pair 类模板(应届生面试重点)
std::pair 是一个模板类,意味着它可以用于多种不同的数据类型组合。其内部结构包含两个成员,即第一个元素和第二个元素。这类结构使得 pair 适用于各种需要同时处理两个相关值的场景。常用操作 2.1. 创建 pair 对象 创建 pair 对象非常简单,只需指定两个值的类型和值即可。例如:`std::pair my...
谁能用通俗的含义来解释一下C++的STL究竟是什么,解决了什么问题?功能强 ...
STL 就是 S(标准) T(模板) L(库), 标准模板库的意思.如名字所言, STL完全有模板组成, 包括类模板, 函数模板, 仿函数等等.其中用到了各种C++中最精华的编程技巧, 比如模板元编程..1) 解决了什么问题?包含了几乎全部的通用算法和容器.std::vector<> 动态数组 std::list<> 链表 std::map<>...
c++做项目的时候,什么时候该用STL什么时候不用STL呢。
比如qt,直接用stl会给更麻烦,内部方法只认自己的库。有更好的库的时候也不用,比如效率更高的库或者功能更符合你需求的库。这时用新库,而不用stl。比如我用boost。另外,开发底层框架的高人往往不用stl,大多因为效率原因。哦,忘了,还有一种情况:学生。因为要学习,所以要自己搞明白。
数据结构面试常见问题
数据结构面试常见问题 篇1 数据结构与算法,这个部分的内容其实是十分的庞大,要想都覆盖到不太容易。在校学习阶段我们可能需要对每种结构,每种算法都学习,但是找工作笔试或者面试的时候,要在很短的时间内考察一个人这方面的能力,把每种结构和算法都问一遍不太现实。所以,实际的情况是,企业一般考察一些看起来很基本...
想找份c++实习工作,本人会c,c++,会用stl,不太熟悉mfc框架,但是理解window...
肯定能啊!去北京非常好找!不过你要纯用mfc的话,我不太清楚,你想学mfc的话,我记得福昕pdf软件公司,是用mfc做的。其他的c++能做的太多了,比如后台开发
C++学到什么程度可以面试工作
《C++ Templates中文版》深入了解现代C++模板,不仅权威解释模板,也深入一般C++思想。《STL源码剖析》详细解析STL底层实现,深入理解常用数据结构和C++内存管理。《提高C++性能的编程技术》关注20%性能缺陷影响80%时间,详细讨论性能提升细节。《从缺陷中学习C\/C++》作为错题集,包含63个问题引发的错误,帮助...