一、STL有哪些組件
STL提供六大組件,彼此可以組合套用:
1、容器
容器就是各種數(shù)據(jù)結(jié)構(gòu),我就不多說(shuō),看看下面這張圖回憶一下就好了,從實(shí)現(xiàn)角度看,STL容器是一種class template。
2、算法
各種常見(jiàn)算法,如sort,search,copy,erase等,我覺(jué)得其中比較值得學(xué)習(xí)的就是sort,next_permutation,partition,merge sort,從實(shí)現(xiàn)角度看,STL算法是一種function template。
3、迭代器
扮演容器與算法之間的膠合劑,是所謂的“泛型指針”。共有五種類型,從實(shí)現(xiàn)角度看,迭代器是一種將operator*,operator->,operator++,operator--等指針相關(guān)操作予以重載的class template。所有STL容器都附帶有自己專屬的迭代器,只有容器設(shè)計(jì)者才知道如何設(shè)計(jì)迭代器。原生指針也是一種迭代器。是設(shè)計(jì)模式的一種,所以被問(wèn)到了解的設(shè)計(jì)模式可以用來(lái)湊數(shù)。
4、仿函數(shù)
行為類函數(shù),可作為算法的某種策略,從實(shí)現(xiàn)角度看,仿函數(shù)是一種重載了operator()的class或class template。一般函數(shù)指針可視為狹義的仿函數(shù)。
5、容器配接器
一種用來(lái)修飾容器或者仿函數(shù)或迭代器接口的東西。比如queue和stack,看著像容器,其實(shí)就是deque包了一層皮。
6、空間配置器
負(fù)責(zé)空間配置與管理。從實(shí)現(xiàn)角度看,配置器是一個(gè)實(shí)現(xiàn)了動(dòng)態(tài)空間配置、空間管理、空間釋放額class template。
二、STL常用的容器有哪些以及各自的特點(diǎn)是什么
1.vector:底層數(shù)據(jù)結(jié)構(gòu)為數(shù)組 ,支持快速隨機(jī)訪問(wèn)。
2.list:底層數(shù)據(jù)結(jié)構(gòu)為雙向鏈表,支持快速增刪。
3.deque:底層數(shù)據(jù)結(jié)構(gòu)為一個(gè)中央控制器和多個(gè)緩沖區(qū),詳細(xì)見(jiàn)STL源碼剖析P146,支持首尾(中間不能)快速增刪,也支持隨機(jī)訪問(wèn)。
4.stack:底層一般用23實(shí)現(xiàn),封閉頭部即可,不用vector的原因應(yīng)該是容量大小有限制,擴(kuò)容耗時(shí)
5.queue:底層一般用23實(shí)現(xiàn),封閉頭部即可,不用vector的原因應(yīng)該是容量大小有限制,擴(kuò)容耗時(shí)(stack和queue其實(shí)是適配器,而不叫容器,因?yàn)槭菍?duì)容器的再封裝)
6.priority_queue:的底層數(shù)據(jù)結(jié)構(gòu)一般為vector為底層容器,堆heap為處理規(guī)則來(lái)管理底層容器實(shí)現(xiàn)
7.set:底層數(shù)據(jù)結(jié)構(gòu)為紅黑樹(shù),有序,不重復(fù)。
8.multiset:底層數(shù)據(jù)結(jié)構(gòu)為紅黑樹(shù),有序,可重復(fù)。?
9.map:底層數(shù)據(jù)結(jié)構(gòu)為紅黑樹(shù),有序,不重復(fù)。
10.multimap:底層數(shù)據(jù)結(jié)構(gòu)為紅黑樹(shù),有序,可重復(fù)。
11.hash_set:????底層數(shù)據(jù)結(jié)構(gòu)為hash表,無(wú)序,不重復(fù)。
12.hash_multiset:底層數(shù)據(jù)結(jié)構(gòu)為hash表,無(wú)序,可重復(fù) 。
13.hash_map :????底層數(shù)據(jù)結(jié)構(gòu)為hash表,無(wú)序,不重復(fù)。
14.hash_multimap:底層數(shù)據(jù)結(jié)構(gòu)為hash表,無(wú)序,可重復(fù)。?
三、說(shuō)說(shuō)std::vector的底層(存儲(chǔ))機(jī)制。
? vector就是一個(gè)動(dòng)態(tài)數(shù)組,里面有一個(gè)指針指向一片連續(xù)的內(nèi)存空間,當(dāng)空間不夠裝下數(shù)據(jù)時(shí),會(huì)自動(dòng)申請(qǐng)另一片更大的空間(一般是增加當(dāng)前容量的50%或100%),然后把原來(lái)的數(shù)據(jù)拷貝過(guò)去,接著釋放原來(lái)的那片空間;當(dāng)釋放或者刪除里面的數(shù)據(jù)時(shí),其存儲(chǔ)空間不釋放,僅僅是清空了里面的數(shù)據(jù)。
四、vector插入刪除和list有什么區(qū)別?
vector插入和刪除數(shù)據(jù),需要對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行復(fù)制移動(dòng),如果vector存儲(chǔ)的對(duì)象很大或者構(gòu)造函數(shù)很復(fù)雜,則開(kāi)銷較大,如果是簡(jiǎn)單的小數(shù)據(jù),效率優(yōu)于list。
list插入和刪除數(shù)據(jù),需要對(duì)現(xiàn)有數(shù)據(jù)進(jìn)行遍歷,但在首部插入數(shù)據(jù),效率很高。
五、什么情況下用vector,什么情況下用list。
vector可以隨機(jī)存儲(chǔ)元素(即可以通過(guò)公式直接計(jì)算出元素地址,而不需要挨個(gè)查找),但在非尾部插入刪除數(shù)據(jù)時(shí),效率很低,適合對(duì)象簡(jiǎn)單,對(duì)象數(shù)量變化不大,隨機(jī)訪問(wèn)頻繁。
list不支持隨機(jī)存儲(chǔ),適用于對(duì)象大,對(duì)象數(shù)量變化頻繁,插入和刪除頻繁。
六、vector中begin和end函數(shù)返回的是什么?
begin返回的是第一個(gè)元素的迭代器,end返回的是最后一個(gè)元素后面位置的迭代器。
七、為什么vector的插入操作可能會(huì)導(dǎo)致迭代器失效?
vector動(dòng)態(tài)增加大小時(shí),并不是在原空間后增加新的空間,而是以原大小的兩倍在另外配置一片較大的新空間,然后將內(nèi)容拷貝過(guò)來(lái),并釋放原來(lái)的空間。由于操作改變了空間,所以迭代器失效。
八、說(shuō)說(shuō)std::list的底層(存儲(chǔ))機(jī)制。
以結(jié)點(diǎn)為單位存放數(shù)據(jù),結(jié)點(diǎn)的地址在內(nèi)存中不一定連續(xù),每次插入或刪除一個(gè)元素,就配置或釋放一個(gè)元素空間
九、list自帶排序函數(shù)的排序原理。
將前兩個(gè)元素合并,再將后兩個(gè)元素合并,然后合并這兩個(gè)子序列成4個(gè)元素的子序列,重復(fù)這一過(guò)程,得到8個(gè),16個(gè),...,子序列,最后得到的就是排序后的序列。
時(shí)間復(fù)雜度:O(nlgn)
void List::sort()
{
List carry;
List counter[64]; //數(shù)組元素為鏈表
int fill = 0;
while (head->next != tail)
{
//head是哨兵,不存放有效值
//head->next元素被移走,所以while循環(huán)不需要head=head->next;
carry.transfer(carry.getHead()->next, head->next, head->next->next);
int i = 0;
while (i < fill && counter[i].getHead()->next != counter[i].getHead())
//counter[i]不是空
{
counter[i].merge(carry);
carry.swap(counter[i++]);
}
carry.swap(counter[i]);
if (i == fill) ++fill;
}
for (int i = 1; i < fill; i++)
counter[i].merge(counter[i - 1]);
//通過(guò)這個(gè)實(shí)現(xiàn)排序(將有序的鏈表合成一個(gè)新的有序鏈表)
swap(counter[fill - 1]);
}
十、deque與vector的區(qū)別。
1)vector是單向開(kāi)口的連續(xù)線性空間,deque是雙向開(kāi)口的連續(xù)線性空間。(雙向開(kāi)口是指可以在頭尾兩端分別做元素的插入和刪除操作)。
2)deque沒(méi)有提供空間保留功能,而vector則要提供空間保留功能。
3)deque也提供隨機(jī)訪問(wèn)迭代器,但是其迭代器比vector迭代器復(fù)雜很多。
十一、不允許有遍歷行為的容器有哪些(不提供迭代器)?
1)queue,除了頭部外,沒(méi)有其他方法存取deque的其他元素。
2)stack(底層以deque實(shí)現(xiàn)),除了最頂端外,沒(méi)有任何其他方法可以存取stack的其他元素。
3)heap,所有元素都必須遵循特別的排序規(guī)則,不提供遍歷功能。
十二、STL容器的參數(shù)allocate是用來(lái)做什么的?
一般用在容器中,作為容器的一個(gè)成員,但一般是用模版參數(shù)傳入,這樣才可以讓我們換成我們自定義的allocator;分配器用于封裝STL容器在內(nèi)存管理上的低層細(xì)節(jié)
十三、你怎樣理解迭代器?
Iterator(迭代器)用于提供一種方法順序訪問(wèn)一個(gè)聚合對(duì)象中各個(gè)元素, 而又不需暴露該對(duì)象的內(nèi)部表示,相當(dāng)于智能指針。包括Input Iterator, Output Iterator, Forward Iterator, Bidirectional Iterator, Random Access Iterator.
十四、 vector每次insert或erase之后,以前保存的iterator會(huì)不會(huì)失效?
理論上會(huì)失效,理論上每次insert或者erase之后,所有的迭代器就重新計(jì)算的,所以都可以看作會(huì)失效,原則上是不能使用過(guò)期的內(nèi)存
但是vector一般底層是用數(shù)組實(shí)現(xiàn)的,我們仔細(xì)考慮數(shù)組的特性,不難得出另一個(gè)結(jié)論,
insert時(shí),假設(shè)insert位置在p,分兩種情況:
a) 容器還有空余空間,不重新分配內(nèi)存,那么p之前的迭代器都有效,p之后的迭
代器都失效
b) 容器重新分配了內(nèi)存,那么p之后的迭代器都無(wú)效咯
erase時(shí),假設(shè)erase位置在p,則p之前的迭代器都有效并且p指向下一個(gè)元素位置(如果之前p在尾巴上,則p指向無(wú)效尾end),p之后的迭代器都無(wú)效
十五、STL對(duì)于小內(nèi)存塊請(qǐng)求與釋放的處理
STL考慮到小型內(nèi)存區(qū)塊的碎片問(wèn)題,設(shè)計(jì)了雙層級(jí)配置器,第一級(jí)配置直接使用malloc()和free();第二級(jí)配置器則視情況采用不同的策略,當(dāng)配置區(qū)大于128bytes時(shí),直接調(diào)用第一級(jí)配置器;當(dāng)配置區(qū)塊小于128bytes時(shí),便不借助第一級(jí)配置器,而使用一個(gè)memory pool來(lái)實(shí)現(xiàn)。究竟是使用第一級(jí)配置器還是第二級(jí)配置器,由一個(gè)宏定義來(lái)控制。SGI STL中默認(rèn)使用第二級(jí)配置器。
二級(jí)配置器會(huì)將任何小額區(qū)塊的內(nèi)存需求量上調(diào)至8的倍數(shù),(例如需求是30bytes,則自動(dòng)調(diào)整為32bytes),并且在它內(nèi)部會(huì)維護(hù)16個(gè)free-list, 各自管理大小分別為8, 16, 24,…,128bytes的小額區(qū)塊,這樣當(dāng)有小額內(nèi)存配置需求時(shí),直接從對(duì)應(yīng)的free list中拔出對(duì)應(yīng)大小的內(nèi)存(8的倍數(shù));當(dāng)客戶端歸還內(nèi)存時(shí),將根據(jù)歸還內(nèi)存塊的大小,將需要?dú)w還的內(nèi)存插入到對(duì)應(yīng)free list的最頂端。
小結(jié):
STL中的內(nèi)存分配器實(shí)際上是基于空閑列表(free list)的分配策略,最主要的特點(diǎn)是通過(guò)組織16個(gè)空閑列表,對(duì)小對(duì)象的分配做了優(yōu)化。
1)小對(duì)象的快速分配和釋放。當(dāng)一次性預(yù)先分配好一塊固定大小的內(nèi)存池后,對(duì)小于128字節(jié)的小塊內(nèi)存分配和釋放的操作只是一些基本的指針操作,相比于直接調(diào)用malloc/free,開(kāi)銷小。
2)避免內(nèi)存碎片的產(chǎn)生。零亂的內(nèi)存碎片不僅會(huì)浪費(fèi)內(nèi)存空間,而且會(huì)給OS的內(nèi)存管理造成壓力。
3)盡可能大化內(nèi)存的利用率。當(dāng)內(nèi)存池尚有的空閑區(qū)域不足以分配所需的大小時(shí),分配算法會(huì)將其鏈入到對(duì)應(yīng)的空閑列表中,然后會(huì)嘗試從空閑列表中尋找是否有合適大小的區(qū)域,
但是,這種內(nèi)存分配器局限于STL容器中使用,并不適合一個(gè)通用的內(nèi)存分配。因?yàn)樗笤卺尫乓粋€(gè)內(nèi)存塊時(shí),必須提供這個(gè)內(nèi)存塊的大小,以便確定回收到哪個(gè)free list中,而STL容器是知道它所需分配的對(duì)象大小的,比如上述:
stl::vector?array;
array是知道它需要分配的對(duì)象大小為sizeof(int)。一個(gè)通用的內(nèi)存分配器是不需要知道待釋放內(nèi)存的大小的,類似于free(p)。
十六、vector和list的區(qū)別
vector和數(shù)組類似,擁有連續(xù)的內(nèi)存空間,支持隨機(jī)的存取,在中間進(jìn)行元素的插入和刪除的操作時(shí)間復(fù)雜度是O(n)
list是由雙向鏈表實(shí)現(xiàn)的,只能通過(guò)數(shù)組指針來(lái)進(jìn)行數(shù)據(jù)訪問(wèn),遍歷中間的元素,時(shí)間的復(fù)雜度是O(n).
十七、vector中erase方法與algorithn中的remove方法區(qū)別
vector中erase方法真正刪除了元素,迭代器不能訪問(wèn)了
remove只是簡(jiǎn)單地將元素移到了容器的最后面,迭代器還是可以訪問(wèn)到。因?yàn)閍lgorithm通過(guò)迭代器進(jìn)行操作,不知道容器的內(nèi)部結(jié)構(gòu),所以無(wú)法進(jìn)行真正的刪除。
十八、STL中的容器都有哪些,優(yōu)缺點(diǎn)?
介紹一下STL,詳細(xì)說(shuō)明STL如何實(shí)現(xiàn)vector。
STL(標(biāo)準(zhǔn)模板庫(kù))可分為容器(containers)、迭代器(iterators)、空間配置器(allocator)、配接器(adapters)、算法(algorithms)、仿函數(shù)(functors)六個(gè)部分。
STL (標(biāo)準(zhǔn)模版庫(kù),Standard Template Library.它由容器、算法、迭代器組成。
STL有以下的一些優(yōu)點(diǎn):
可以方便容易地實(shí)現(xiàn)搜索數(shù)據(jù)或?qū)?shù)據(jù)排序等一系列的算法;
調(diào)試程序時(shí)更加安全和方便;
即使是人們用STL在UNIX平臺(tái)下寫的代碼你也可以很容易地理解(因?yàn)镾TL是跨平臺(tái)的)。
vector實(shí)質(zhì)上就是一個(gè)動(dòng)態(tài)數(shù)組,會(huì)根據(jù)數(shù)據(jù)的增加,動(dòng)態(tài)的增加數(shù)組空間。
deque從邏輯上來(lái)看是連續(xù)的內(nèi)存,本質(zhì)上是由一段段固定大小 的連續(xù)空間組成。deque采用類似索引的結(jié)構(gòu)管理內(nèi)存。vector有capacity和reserve函數(shù),deque和list一樣,沒(méi)有capacity和reserve函數(shù)。
總結(jié)如下:?
十九、說(shuō)說(shuō)std::deque的底層機(jī)制。
deque動(dòng)態(tài)地以分段連續(xù)空間組合而成,隨時(shí)可以增加一段新的連續(xù)空間并鏈接起來(lái)。不提供空間保留功能。
注意:除非必要,我們盡可能選擇使用vector而非deque,因?yàn)閐eque的迭代器比vector迭代器復(fù)雜很多。對(duì)deque排序,為了提高效率,可先將deque復(fù)制到一個(gè)vector上排序,然后再?gòu)?fù)制回deque。
deque采用一塊map(不是STL的map容器)作為主控,其為一小塊連續(xù)空間,其中每個(gè)元素都是指針,指向另一段較大的連續(xù)空間(緩沖區(qū))。
deque的迭代器包含4個(gè)內(nèi)容:
1)cur:迭代器當(dāng)前所指元素
2)first:此迭代器所指的緩沖區(qū)的頭。
3)last:緩沖區(qū)尾。
4)node:指向管控中心。
二十、說(shuō)說(shuō)std::map底層機(jī)制。
map以RB-TREE為底層機(jī)制。RB-TREE是一種平衡二叉搜索樹(shù),自動(dòng)排序效果不錯(cuò)。
通過(guò)map的迭代器不能修改其鍵值,只能修改其實(shí)值。所以map的迭代器既不是const也不是mutable。
二十一、紅黑樹(shù)有什么性質(zhì)?
1)每個(gè)結(jié)點(diǎn)是紅色或者黑色。
2)根結(jié)點(diǎn)為黑色。
3)葉結(jié)點(diǎn)為黑色的NULL結(jié)點(diǎn)。
4)如果結(jié)點(diǎn)為紅,其子節(jié)點(diǎn)必須為黑。
5)任一結(jié)點(diǎn)到NULL的任何路徑,所含黑結(jié)點(diǎn)數(shù)必須相同。
二十二、vector、list、map、deque用erase(it)后,迭代器的變化。
vector和deque是序列式容器,其內(nèi)存分別是連續(xù)空間和分段連續(xù)空間,刪除迭代器it后,其后面的迭代器都失效了,此時(shí)it及其后面的迭代器會(huì)自動(dòng)加1,使it指向被刪除元素的下一個(gè)元素。
list刪除迭代器it時(shí),其后面的迭代器都不會(huì)失效,將前面和后面連接起來(lái)即可。
map也是只能使當(dāng)前刪除的迭代器失效,其后面的迭代器依然有效。
二十三、hash_map與map的區(qū)別?什么時(shí)候用hash_map,什么時(shí)候用map?
構(gòu)造函數(shù):hash_map需要hash function和等于函數(shù),而map需要比較函數(shù)(大于或小于)。
存儲(chǔ)結(jié)構(gòu):hash_map以hashtable為底層,而map以RB-TREE為底層。?
總的說(shuō)來(lái),hash_map查找速度比map快,而且查找速度基本和數(shù)據(jù)量大小無(wú)關(guān),屬于常數(shù)級(jí)別。而map的查找速度是logn級(jí)別。但不一定常數(shù)就比log小,而且hash_map還有hash function耗時(shí)。
如果考慮效率,特別當(dāng)元素達(dá)到一定數(shù)量級(jí)時(shí),用hash_map。
考慮內(nèi)存,或者元素?cái)?shù)量較少時(shí),用map。
二十四、hashtable,hash_set,hash_map的區(qū)別。
hash_set以hashtable為底層,不具有排序功能,能快速查找。其鍵值就是實(shí)值。(set以RB-TREE為底層,具有排序功能。)
hash_map以以hashtable為底層,沒(méi)有自動(dòng)排序功能,能快速查找,每一個(gè)元素同時(shí)擁有一個(gè)實(shí)值和鍵值。(map以RB-TREE為底層,具有排序功能。)
二十五、map和set的3個(gè)問(wèn)題。
1)為何map和set的插入刪除效率比其他序列容器高。
因?yàn)椴恍枰獌?nèi)存拷貝和內(nèi)存移動(dòng)
2)為何map和set每次Insert之后,以前保存的iterator不會(huì)失效?
因?yàn)椴迦氩僮髦皇墙Y(jié)點(diǎn)指針換來(lái)?yè)Q去,結(jié)點(diǎn)內(nèi)存沒(méi)有改變。而iterator就像指向結(jié)點(diǎn)的指針,內(nèi)存沒(méi)變,指向內(nèi)存的指針也不會(huì)變。
2)當(dāng)數(shù)據(jù)元素增多時(shí)(從10000到20000),map的set的查找速度會(huì)怎樣變化?
RB-TREE用二分查找法,時(shí)間復(fù)雜度為logn,所以從10000增到20000時(shí),查找次數(shù)從log10000=14次到log20000=15次,多了1次而已。
二十六、map是怎么實(shí)現(xiàn)的?查找的復(fù)雜度是多少?能不能邊遍歷邊插入?
紅黑樹(shù)和散列
O(logn)
不可以,map不像vector,它在對(duì)容器執(zhí)行erase操作后不會(huì)返回后一個(gè)元素的迭代器,所以不能遍歷地往后刪除。
二十七、hash_map和map的區(qū)別在哪里?
hash_map底層是散列的所以理論上操作的平均復(fù)雜度是常數(shù)時(shí)間,map底層是紅黑樹(shù),理論上平均復(fù)雜度是O(logn),這里總結(jié)一下,選用map還是hash_map,關(guān)鍵是看關(guān)鍵字查詢操作次數(shù),以及你所需要保證的是查詢總體時(shí)間還是單個(gè)查詢的時(shí)間。如果是要很多次操作,要求其整體效率,那么使用hash_map,平均處理時(shí)間短。如果是少數(shù)次的操作,使用 hash_map可能造成不確定的O(N),那么使用平均處理時(shí)間相對(duì)較慢、單次處理時(shí)間恒定的map,考慮整體穩(wěn)定性應(yīng)該要高于整體效率,因?yàn)榍疤嵩诓僮鞔螖?shù)較少。如果在一次流程中,使用hash_map的少數(shù)操作產(chǎn)生一個(gè)最壞情況O(N),那么hash_map的優(yōu)勢(shì)也因此喪盡了。
二十八、為何map和set不能像vector一樣有個(gè)reserve函數(shù)來(lái)預(yù)分配數(shù)據(jù)?
map和set內(nèi)部存儲(chǔ)的已經(jīng)不是元素本身了,而是包含元素的節(jié)點(diǎn)。也就是說(shuō)map內(nèi)部使用的Alloc并不是map聲明的時(shí)候從參數(shù)中傳入的Alloc。例如:
map, Alloc?> intmap;
這時(shí)候在intmap中使用的allocator并不是Alloc, 而是通過(guò)了轉(zhuǎn)換的Alloc,具體轉(zhuǎn)換的方法時(shí)在內(nèi)部通過(guò)
Alloc::rebind重新定義了新的節(jié)點(diǎn)分配器,詳細(xì)的實(shí)現(xiàn)參看徹底學(xué)習(xí)STL中的Allocator。
其實(shí)你就記住一點(diǎn),在map和set里面的分配器已經(jīng)發(fā)生了變化,reserve方法你就不要奢望了。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享標(biāo)題:STL知識(shí)點(diǎn)總結(jié)-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://aaarwkj.com/article10/ccdddo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、商城網(wǎng)站、靜態(tài)網(wǎng)站、網(wǎng)站內(nèi)鏈、營(yíng)銷型網(wǎng)站建設(shè)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容