顯示具有 STL 標籤的文章。 顯示所有文章
顯示具有 STL 標籤的文章。 顯示所有文章

2016年4月28日 星期四

C++ vector 複製

在C++的stl::vector 裡

如果想要複製一個vector到另一個vector的話有太多種方法

1.使用for 直接複製(速度最慢)

for(int i = 0; i < original.size(); ++i)
    new_vector[i] = original[i];

2.使用vector.assign()

new_vector.assign(original.begin(), original.end());

個人覺得這是最佳解,速度比起上一個快很多

3.使用vector.insert()

new_vector.reserve(original.size());
new_vector.insert(new_vector.end(), original.begin(), original.end())
insert也可以使用在把兩個vector合併(append)
用法就與上面類似了,就是reserve的時候也要加上new_vector的大小

4.使用copy constructor

new_vector = vector(original);
這個方法稍微測試了一下,好像不是真正的去複製
只是把new_vector指向了original的記憶體位置
也就是說new_vector跟original是同一個物件
動了其中一個兩個都會改變
也就是彼此是彼此的別名(我在說啥XD)

2016年3月3日 星期四

STL心得

對我來說

C++比起C最大的好處

不是物件導向的開發方式(雖說這也是其中之一)

而是它有很多模板可以使用(STL)

提供了vector, queue, stack, list...

很多厲害的演算法一定脫離不了這些資料結構

而在github上看了很多高手的程式

觀察到大部分實作stack的時候不使用stack而改用vector

於是我深入研究一下

stack其實更偏向於container adapter

也就是說他是拿來裝其他container(vector, list, deque...)較多

而且他少了vector能隨機存取的優點,讓debug更不方便

因此如果我們使用vector並只在尾端增減的話就能完美地取代stack

但用stack也不是全沒好處

一來是可以很明確地告訴開發者這變數LIFO的機制

二來是我自己測試,stack在push & pop的時候比vector快一咪咪