日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

写题过程中碰见的小问题

發(fā)布時(shí)間:2023/12/13 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 写题过程中碰见的小问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • ++和--
  • vector
    • 二維vector的初始化
    • 數(shù)組中最大的數(shù)max_element()
    • 數(shù)組所有元素之和accumulate()
    • vector數(shù)組去重
    • 對(duì)pair類型的vector排序
    • 對(duì)元素都為正整數(shù)的vector利用sort默認(rèn)的升序排列進(jìn)行降序排列
    • 一維數(shù)組轉(zhuǎn)二維數(shù)組
  • size_t和int
  • 如何不用臨時(shí)變量交換兩個(gè)數(shù)?
  • 將類函數(shù)的形參賦值給同名的類成員變量


++和–

以本題為例形如:
left++ == cols 和 ++left == cols 兩者的結(jié)果是有區(qū)別的,前者不成立、后者成立。(自增自減運(yùn)算符的優(yōu)先級(jí)很低。。。)


vector

二維vector的初始化

  • 可以利用另一個(gè)二維數(shù)組的大小來(lái)初始化目標(biāo)二維vector:
  • vector<vector<int>> vc1 = { {1,1} ,{1,1},{1,1} }; int rows = vc1.size(); int cols = vc1[0].size(); vector<vector<int>> vc2(rows, vector<int>(cols, 0));

  • 和一有區(qū)別的是,可以直接通過(guò)拷貝構(gòu)造函數(shù)用另一個(gè)二維數(shù)組直接初始化目標(biāo)二維vector:
  • vector<vector<int>> vc1 = { {1,1} ,{1,1},{1,1} }; vector<vector<int>> vc2 = vc1;


    數(shù)組中最大的數(shù)max_element()

    max_element():
    屬于頭文件 algorithm ,格式 ForwardIterator max_element (ForwardIterator first, ForwardIterator last); 接受同一數(shù)組的兩個(gè)迭代器參數(shù),構(gòu)成一個(gè)迭代器范,返回迭代器范中最大元素的迭代器。


    數(shù)組所有元素之和accumulate()

    accumulate():
    隸屬頭文件 numeric ,格式 T accumulate (InputIterator first, InputIterator last, T init); 接受同一數(shù)組的兩個(gè)迭代器作為參數(shù),以及一個(gè)累加和初始值 init ,返回迭代器范和初始值的累加和。


    vector數(shù)組去重

    unique 去重的前提是數(shù)組有序,unique 會(huì)將所有重復(fù)元素放到數(shù)組尾部,并返回不重復(fù)內(nèi)容的尾后迭代器,換言之,也就是第一個(gè)重復(fù)元素的迭代器,那么就可以調(diào)用 erase 從第一個(gè)重復(fù)元素的迭代器開(kāi)始刪除直至 vector 的 尾后迭代器。

    #include <algorithm> sort(ivec.begin(), ivec.end()); ivec.erase(unique(ivec.begin(), ivec.end()), ivec.end());

    對(duì)pair類型的vector排序

    vector<pair<int, int>> vii; sort(vii.begin(), vii.end());

    形如上面的代碼,sort 排序方式是根據(jù) pair 中 first 的值升序排列(默認(rèn))。


    對(duì)元素都為正整數(shù)的vector利用sort默認(rèn)的升序排列進(jìn)行降序排列

    其實(shí)對(duì)比使用模板的降序 sort 并沒(méi)有效率上的提升,只是思維上的開(kāi)拓。

    原理就是把元素都變?yōu)橄喾磾?shù)—— v[i] 變?yōu)?-v[i] ,之后調(diào)用 sort(v.begin(), v.end()) 。

    但使用的時(shí)候反而有些雞肋,需要將 -v[i] 再變?yōu)?v[i] 。因此其適用于特殊情況,如 lc506. 相對(duì)名次。

    vector<pair<int, int>> vii; for(int i=0; i<n; i++){vii.push_back(make_pair(-score[i], i)); } sort(vii.begin(), vii.end());

    一維數(shù)組轉(zhuǎn)二維數(shù)組

    主要是通過(guò) emplace_back 直接構(gòu)造一維數(shù)組,加入到二維數(shù)組中。

    // 將一維數(shù)組 original 轉(zhuǎn)為 m 行 n 列的二維數(shù)組 vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {int sizes = original.size();vector<vector<int>> v;if(sizes != m*n) return v;for(auto beg=original.begin(); beg!=original.end(); beg += n){v.emplace_back(beg, beg+n);}return v; }

    size_t和int

    for(int i = popped.size() - 1; i >= 0; i--){s_out.push(popped[i]); }for(size_t i = popped.size() - 1; i >= 0; i--){s_out.push(popped[i]); }

    一直以為 int 和 size_t 沒(méi)有什么大區(qū)別,結(jié)果如上所示,第二種寫(xiě)法是錯(cuò)誤的,因?yàn)?size_t 必須保存 大于等于 0 的數(shù),而 -- 操作會(huì)使 i 最終的值 小于0 ,因此運(yùn)行時(shí)會(huì)出現(xiàn)錯(cuò)誤。


    如何不用臨時(shí)變量交換兩個(gè)數(shù)?

    int a = 1; int b = 2; /*方法1*/ a = a + b; //新a=原a+原b b = a - b; //新b=新a-b=原a+原b-原b=原a a = a - b; //新新a=新a-新b=原a+原b-新b=原a+原b-原a=原b/*方法2 ^ 按位異或 異曲同工*/ a = a ^ b; b = a ^ b; a = a ^ b;

    將類函數(shù)的形參賦值給同名的類成員變量

    有這樣的代碼:

    class Solution{int a; public:void fun(int a){} };

    如果在fun函數(shù)內(nèi),我想將調(diào)用時(shí), 實(shí)參a 傳給 形參a 的值賦給 類的成員變量a,該怎么辦呢?

    這就牽扯到了以前提到過(guò)的this指針的知識(shí),以前講過(guò),this指針指向調(diào)用當(dāng)前函數(shù)的對(duì)象,而 調(diào)用fun函數(shù)的對(duì)象 也就是 Solution的對(duì)象 。而我們想要進(jìn)行的操作也是將 形參a的值 賦給 調(diào)用當(dāng)前函數(shù)的對(duì)象其成員a ,因此可以這樣實(shí)現(xiàn):

    void fun(int a){this->a = a; }

    總結(jié)

    以上是生活随笔為你收集整理的写题过程中碰见的小问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。