寫題過程中碰見的小問題

文章目錄

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


++和–

以本題為例形如:
left++ == cols++left == cols 兩者的結果是有區別的,前者不成立、后者成立。(自增自減運算符的優先級很低。。。)
在這里插入圖片描述
在這里插入圖片描述


vector

二維vector的初始化

  1. 可以利用另一個二維數組的大小來初始化目標二維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));

在這里插入圖片描述

  1. 和一有區別的是,可以直接通過拷貝構造函數用另一個二維數組直接初始化目標二維vector:
vector<vector<int>> vc1 = { {1,1} ,{1,1},{1,1} };
vector<vector<int>> vc2 = vc1;

在這里插入圖片描述


數組中最大的數max_element()

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


數組所有元素之和accumulate()

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


vector數組去重

unique 去重的前提是數組有序,unique 會將所有重復元素放到數組尾部,并返回不重復內容的尾后迭代器,換言之,也就是第一個重復元素的迭代器,那么就可以調用 erase 從第一個重復元素的迭代器開始刪除直至 vector 的 尾后迭代器。

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

對pair類型的vector排序

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

形如上面的代碼,sort 排序方式是根據 pairfirst 的值升序排列(默認)。


對元素都為正整數的vector利用sort默認的升序排列進行降序排列

其實對比使用模板的降序 sort 并沒有效率上的提升,只是思維上的開拓。

原理就是把元素都變為相反數—— v[i] 變為 -v[i] ,之后調用 sort(v.begin(), v.end())

但使用的時候反而有些雞肋,需要將 -v[i] 再變為 v[i] 。因此其適用于特殊情況,如 lc506. 相對名次。

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());

一維數組轉二維數組

主要是通過 emplace_back 直接構造一維數組,加入到二維數組中。

// 將一維數組 original 轉為 m 行 n 列的二維數組
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]);
}

一直以為 intsize_t 沒有什么大區別,結果如上所示,第二種寫法是錯誤的,因為 size_t 必須保存 大于等于 0 的數,而 -- 操作會使 i 最終的值 小于0 ,因此運行時會出現錯誤。


如何不用臨時變量交換兩個數?

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;

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

有這樣的代碼:

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

如果在fun函數內,我想將調用時, 實參a 傳給 形參a 的值賦給 類的成員變量a,該怎么辦呢?

這就牽扯到了以前提到過的this指針的知識,以前講過,this指針指向調用當前函數的對象,而 調用fun函數的對象 也就是 Solution的對象 。而我們想要進行的操作也是將 形參a的值 賦給 調用當前函數的對象其成員a ,因此可以這樣實現:

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/443791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443791.shtml
英文地址,請注明出處:http://en.pswp.cn/news/443791.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode——二叉樹序列化與反序列化

文章目錄題目思路問題一問題二代碼實現題目 請實現兩個函數&#xff0c;分別用來序列化和反序列化二叉樹。 設計一個算法來實現二叉樹的序列化與反序列化。不限定序列 / 反序列化算法執行邏輯&#xff0c;你只需要保證一個二叉樹可以被序列化為一個字符串并且將這個字符串反序…

jsp中生成的驗證碼和存在session里面的驗證碼不一致的處理

今天在調試項目的時候發現&#xff0c;在提交表單的時候的驗證碼有問題&#xff0c;問題是這樣的&#xff1a;就是通過debug模式查看得知&#xff1a;jsp頁面生成的驗證碼和表單輸入的頁面輸入的一樣&#xff0c;但是到后臺執行的時候&#xff0c;你會發現他們是不一樣的&#…

求1~n這n個整數十進制表示中1出現的次數

文章目錄題目思路代碼復雜度分析題目 輸入一個整數 n &#xff0c;求1&#xff5e;n這n個整數的十進制表示中1出現的次數。 例如&#xff0c;輸入12&#xff0c;那么1&#xff5e;12這些整數中包含1 的數字有1、10、11和12。可得1一共出現了5次。 思路 將個位、十位……每位…

求數字序列中的第n位對應的數字

文章目錄題目思路代碼復雜度分析致謝題目 數字以0123456789101112131415…的格式序列化到一個字符序列中。在這個序列中&#xff0c;第5位&#xff08;從下標0開始計數&#xff09;是5&#xff0c;第13位是1&#xff0c;第19位是4&#xff0c;等等。 請寫一個函數&#xff0c…

一學就廢的歸并排序

文章目錄其他與排序有關的文章原理代碼實現復雜度分析其他與排序有關的文章 一學就廢的三種簡單排序【冒泡、插入、選擇】 原理 歸并排序&#xff08;Merge sort&#xff09;&#xff1a; 歸并排序對元素 遞歸地 進行 逐層折半分組&#xff0c;然后從最小分組開始&#xff0c…

神奇的x -x,Lowbit函數的實現方式!

文章目錄-xx & -x&#xff0c;當x為偶數時x & -x&#xff0c;當x為奇數時x&-x 的實際用途-x -x 在二進制里表示對 x 的二進制按位取反(~x)之后再加 1 &#xff0c;即 -x ~x1x & -x&#xff0c;當x為偶數時 在執行 x & -x 時&#xff0c;若 x 為偶數&am…

JAVA實現把指定文件夾下的所有文件壓縮成zip包

1.代碼如下&#xff1a; package cn.gov.csrc.base.util;import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import…

樹狀數組的相關知識 及 求逆序對的運用

文章目錄樹狀數組概念前綴和和區間和樹狀數組原理區間和——單點更新前綴和——區間查詢完整代碼離散化sort函數unique函數去重erase函數僅保留不重復元素通過樹狀數組求逆序對樹狀數組概念 樹狀數組又名二叉索引樹&#xff0c;其查詢與插入的復雜度都為 O(logN)&#xff0c;其…

二叉搜索樹相關知識及應用操作

文章目錄概念查找二叉搜索樹的第k大節點概念 二叉查找樹&#xff08;Binary Search Tree&#xff09;&#xff0c;&#xff08;又名&#xff1a;二叉搜索樹&#xff0c;二叉排序樹&#xff09;——它或者是一棵空樹&#xff0c;或者是具有下列性質的二叉樹&#xff1a; 若它的…

二叉樹相關知識及求深度的代碼實現

文章目錄樹二叉樹滿二叉樹和完全二叉樹二叉樹的性質代碼實現求二叉樹的深度樹 樹是一種非線性的數據結構&#xff0c;它是由n個有限結點組成一個具有層次關系的集合。 樹的相關名詞&#xff1a; 根節點&#xff1a;沒有前驅結點的結點。父節點&#xff0c;子節點&#xff1a…

平衡樹相關知識及如何判斷一棵樹是否平衡

文章目錄概念代碼實現判斷一棵二叉樹是否為平衡樹概念 平衡樹(Balance Tree&#xff0c;BT) 指的是&#xff0c;任意節點的子樹的高度差都小于等于1。 常見的符合平衡樹的有&#xff1a; B樹&#xff08;多路平衡搜索樹&#xff09;AVL樹&#xff08;二叉平衡搜索樹&#xf…

大端小端存儲模式詳解及判斷方法

文章目錄大小端模式的概念兩種模式出現原因兩種模式的優劣大小端的應用情景判斷機器的字節序大小端模式的概念 當我們查看數據在內存中的存儲情況時&#xff0c;我們經常會發現一個很奇怪的現象&#xff0c;什么現象呢&#xff1f; int main() {int i 12;return 0; }數據在內…

Linux 內存管理 | 物理內存、內存碎片、伙伴系統、SLAB分配器

文章目錄物理內存物理內存分配外部碎片內部碎片伙伴系統(buddy system)slab分配器物理內存 在Linux中&#xff0c;內核將物理內存劃分為三個區域。 在解釋DMA內存區域之前解釋一下什么是DMA&#xff1a; DMA&#xff08;直接存儲器訪問&#xff09; 使用物理地址訪問內存&am…

Linux 內存管理 | 虛擬內存管理:虛擬內存空間、虛擬內存分配

文章目錄虛擬地址空間用戶空間內核空間用戶空間內存分配malloc內核空間內存分配kmallocvmalloc虛擬地址空間 在早期的計算機中&#xff0c;程序是直接運行在物理內存上的&#xff0c;而直接使用物理內存&#xff0c;通常都會面臨以下幾種問題&#xff1a; 內存缺乏訪問控制&a…

Linux | 編譯原理、gcc的命令參數、自動化構建工具 make/Makefile

文章目錄編譯原理預處理編譯匯編鏈接gcc的常用命令參數make 和 Makefile 的概念make的運行通配符自動化變量偽目標.PHONE:【命令】編譯原理 在解釋 makefile 前&#xff0c;首先解釋一下 .c 文件變成 .exe 文件要經過的四個步驟——預處理、編譯、匯編和鏈接&#xff08;參考來…

全排列變種:限定 排列的差值范圍 及 排列中的元素個數

文章目錄題目描述思路代碼實現題目描述 詳細描述&#xff1a;字節跳動2019春招研發部分編程題——萬萬沒想到之抓捕孔連順 輸入描述&#xff1a; 第一行包含空格分隔的兩個數字 N和D(1?≤?N?≤?1000000; 1?≤?D?≤?1000000) 第二行包含N個整數&#xff08;取值區間為…

Linux | 進程概念、進程狀態(僵尸進程、孤兒進程、守護進程)、進程地址空間

文章目錄進程和程序操作系統如何控制和調度程序進程控制塊–PCB子進程進程狀態僵尸進程孤兒進程守護進程&#xff08;精靈進程&#xff09;進程地址空間引言頁表進程和程序 程序&#xff1a; 一系列有序的指令集合&#xff08;就是我們寫的代碼&#xff09;。進程&#xff1a;…

Linux 進程控制 :進程創建,進程終止,進程等待,程序替換

文章目錄進程創建進程等待程序替換進程終止進程創建 fork函數&#xff1a; 操作系統提供的創建新進程的方法&#xff0c;父進程通過調用 fork函數 創建一個子進程&#xff0c;父子進程代碼共享&#xff0c;數據獨有。 當調用 fork函數 時&#xff0c;通過 寫時拷貝技術 來拷貝…

Linux 內存管理 | 連續分配方式 和 離散分配方式

文章目錄前言連續分配單一連續分配分區式分配固定分區分配動態分區分配可重定位分區分配離散分配分段分頁多級頁表快表(TLB)段頁式Linux前言 Linux 內存管理 | 虛擬內存管理&#xff1a;虛擬內存空間、虛擬內存分配 Linux 內存管理 | 物理內存、內存碎片、伙伴系統、SLAB分配器…

操作系統 | 用戶態和內核態的切換(中斷、系統調用與過程(庫函數)調用)

文章目錄中斷過程調用系統調用過程調用和系統調用的區別中斷 用戶態、內核態之間的切換是怎么實現的? 用戶態→內核態 是通過中斷實現的。并且 中斷是唯一途徑 。核心態→用戶態 的切換是通過執行一個特權指令&#xff0c;將程序狀態字 (PSW) 的標志位設置為 用戶態 。 中斷…