C++ 学習ノート (2) - ベクトル ライブラリの記事

ベクトルとは?

vectorこれは、ランダム アクセスをサポートする C++ STL の動的配列クラス ライブラリです。Java に似ていますArrayList


ベクターライブラリーの導入方法は?

#include<vector>
using namespace std;

ベクターを作成するには?

Java の ArrayList と同様に、ジェネリックを使用して、特定の型のデータを格納できるベクターを作成します。

vector<int> nums;

上記のコードのように、intタイプのベクトルを作成します。


一般的な方法

vector [ 1 ]の一般的なメンバ メソッドを次に示します

要素を挿入

// 向末尾添加一个元素
void push_back(const T& x)

要素を削除

// 删除末尾的元素
void pop_back()

// 清空所有元素
void clear()

アクセス要素

// 返回pos位置元素的引用
reference at(int pos)

// 返回首元素的引用
reference front()

// 返回尾元素的引用
reference back()

// 数组式的访问方式
nums[index]

要素を修正する

// 设置第n个元素的值为x
void assign(int n,const T& x)

// 数组式的修改方式
nums[index] = newValue;

サイズを探す

unsigned int size() const

ここでの戻り値の型は符号なし整数であることに注意してくださいunsigned int

// 判断是否为空
bool empty() const

// 通过当前大小
if (nums.size() == 0)

二次元配列

vector<vector<int>> nums;

分類する

ベクトルを並べ替えるには、algorithmライブラリをインポートしてそのsortメソッドを呼び出す必要があります。

// 默认升序排序
sort(nums.begin(), nums.end());

// 降序排序方法
sort(nums.begin(), nums.end(), greater<int>());

// 另一种升序排序方法
sort(nums.begin(), nums.end(), less<int>());

sortの 3 つのパラメーターのオーバーロードは、 Java のComparatorコンパレーターと同様に、比較メソッドに渡すことができます。インポートライブラリは、それぞれ降順と昇順を表すと をfunctional使用できます。山括弧内のジェネリック型は正しく記述する必要があることに注意してください。greaterless


カスタムソート

昇順と降順以外の比較ロジックが必要な場合があるため、カスタム コンパレータ[ 2 ]が必要です。

より複雑な構造

struct s
{
    
    
	int a, b;
};

カスタムコンパレータ

true戻り値のある条件は、s1前のs2条件を表すことに注意してください。

bool comparator(const s &s1, const s &s2)
{
    
    
	return s1.a > s2.a;
}

カスタム コンパレータを使用した並べ替え

s構造体を格納するためにベクトルを再定義する

vector<s> sVector;

分類する

sort(sVector.begin(), sVector.end(), comparator);

実際に遭遇したピット

ベクトルが空の場合、通常の判定

if (0 < nums.size() - 1)

期待される結果は false ですが、実際の実行結果は true です。

デバッグ後、予期しない結果が得られたことがわかりnums.size() - 1、出力はそれが であることを示してい4294967295ます2^32-1

その理由は、sizeベクトル メソッドの戻り値の型が符号なし整数であり、実際には演算であるからです0 + (-1). 負の数は補数コードに格納されるため、-1ベクトルの 2 進数表現は11111111 11111111 11111111 111111110 と合計しても 32 個の 1 のままであり、 10 進数に変換されているのは4294967295[ 3 ]です

解決

計算結果を符号付き整数に強制します[ 4 ]

if (0 < (int)(nums.size() - 1))

  1. ルーキーチュートリアル 参照↩︎

  2. ブログ投稿「ベクトルでの最も単純な並べ替えの使用法から、カスタム比較関数 comp の後に構造を並べ替えるための並べ替えアルゴリズムまで」を参照してください ↩︎

  3. ブログ投稿「C++ STL 標準テンプレート ライブラリ ベクトルの長さ size()-1 を見つけるための小さな穴」を参照してください ↩︎

  4. ブログ記事「vector.size()-1によるエラー」 参照↩︎

おすすめ

転載: blog.csdn.net/Mr_Megamind/article/details/106179723