如何使用C 編寫乙個模板,可以同時適用於陣列和vector int 型別且避免資料的複製?

時間 2021-06-01 10:03:29

1樓:rayhunter

這個問題有意思,大佬們說的對。

本身就應該寫兩個函式,但是非要從技術角度看。

我想到的是傳位址解決拷貝問題,

然後用引數自動推導,求得陣列大小

N模板特化來分支

仿函式,過載()操作,

勉強滿足樓主要求。

template

T>class

SortFunctor

{};template

intN

>class

SortFunctor

};template

T>class

SortFunctor

vector

>};// use

intarray[10

]=;std

::vector

vec=

;SortFunctor

(array

)>()(&

array

);SortFunctor

(vec

)>()(&

vec);

2樓:塵中遠

std::sort就可以,你vector就傳迭代器。陣列的話,陣列的首位址就是迭代器的begin,陣列首位址加上陣列長度作為迭代器的end。

3樓:

可以參考STL中迭代器的構造方式。

STL原始碼剖析中詳細介紹了構造的思路和方法,基本上就是一步步引導的方式,推薦閱讀:

1. 首先直接封裝指標作為迭代器,

2. 發現無法獲取型別資訊,然後嘗試了增加模版引數利用引數推導來做,3. 然後發現這樣無法在返回值中應用這個模版推導的特性,4. 然後使用了在類中宣告型別的做法,

5. 接著講了trait技法:使用部分特化來處理原生指標和const指標的情況。

4樓:陳碩

void

sort

(vector

&x)

template

>void

sort

(int(&

x)[N])

為什麼一定要用模板?用過載不行嗎?

乙個關於C 模板的問題?

暮無井見鈴 用不著浮蓮子,這裡用繼承更直接。公用部分寫到 TestBase 裡。template T class TestBase template T struct is complex std false type template T struct is complex complex std...

如何用c語言編寫乙個程式,計算float x 0 1與0 1的差值

HOOCCOOH 首先假設題主需要這個差值的十進位制表示。根據 IEEE754 浮點使用的二進位制表示法必定在十進位制下有限位數,直接用 printf 指定位數列印即可。唯一需要注意的是到底需要打多少位才夠。我們知道浮點在計算機中表示為 其中 為尾數字數,為浮點指數。又由於 0 eeimg 1 在十...

如何為c 編寫的程式製作乙個網頁版的應用呢?

王加加 不同程式語言的後端框架有很多,選乙個順手的就可以了。看起來這個需求也不是很複雜,選最簡單的框架來實現就可以了。以Python為例,Django有點重,可以用輕量一點的Flask。既然你已經寫了C 控制台應用,問題就變成 如何用python呼叫乙個可執行程式,並且獲得輸出?這個有很多辦法,比較...