您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++怎么使用span<T>或者span_p<T>”,在日常操作中,相信很多人在C++怎么使用span<T>或者span_p<T>問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++怎么使用span<T>或者span_p<T>”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
F.24:使用span<T>或者span_p<T>表示半開序列
半開是數學概念,指的是C++中的數組用[p:p+n)表示時,p指向第一個元素,而p+n則處于數組之外。
Reason(原因)
Informal/non-explicit ranges are a source of errors.
非正式的,不清楚的范圍是錯誤之源。
Example(示例)
X* find(span<X> r, const X& v); // find v in r
vector<X> vec;
// ...
auto p = find({vec.begin(), vec.end()}, X{}); // find X{} in ve
在C++代碼中,范圍的概念特別常見。典型情況下,范圍不會被明示而且很難確認是否被正常使用。尤其,給定一對表示參數(p, n)以表示數組[n:p+n),通常不可能知道p的后面是否真有n個元素可用。作為簡單的輔助類,span<T>用于表明范圍[p:q),而span_p<T>用于表示的范圍開始于p,終止于第一個謂詞為true的元素。
譯者注:很遺憾沒有找到span_p<T>的用法示例。
Example(示例)
span表示元素的范圍,但是我們怎么操作范圍中的元素呢?
void f(span<int> s){ // range traversal (guaranteed correct) for (int x : s) cout << x << '\n'; // C-style traversal (potentially checked) for (gsl::index i = 0; i < s.size(); ++i) cout << s[i] << '\n'; // random access (potentially checked) s[7] = 9; // extract pointers (potentially checked) std::sort(&s[0], &s[s.size() / 2]);}
A span<T>
object does not own its elements and is so small that it can be passed by value.
span<T>對象不會真正用于它的元素,小到可以直接傳遞對象。
Passing a span
object as an argument is exactly as efficient as passing a pair of pointer arguments or passing a pointer and an integer count.
傳遞span對象作為參數和傳遞一對指針參數或者一個指針一個整數在高效性方面完全相同。
Enforcement(實施建議)
(復雜)當代碼訪問以整形值確定邊界的指針類型參數時,報警并建議使用span代替。
到此,關于“C++怎么使用span<T>或者span_p<T>”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。