[C++]Vectorの先頭からN個の要素を取得するには?

C++

どうも、ちょげ(@chogetarou)です。

Vectorの先頭からN個の要素を取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

Vectorの先頭からN個の要素を取得する方法は、3つあります。

for文

1つ目は、for文を使う方法です。

まず、取得した要素を格納するVectorを用意します。

次に、for文で0からNまでの数値をループします。

ループ処理で、用意したVectorの末尾に、対象のVectorのループ変数のインデックスの要素を追加します。

//myVect=対象のVector
vector<T> result;  //取得した要素を格納する
for (int i = 0; i < length; i++) {
    result.push_back(myVect[i]);
}

上記のfor文は、用意したVectorに先頭からN個の要素を格納します。

使用例

#include <iostream>
#include <vector>
using namespace std;

int main(void){
    
    vector<string> nums = { "one", "two", "three", "four", "five", "six", "seven"};
    
    int length = 3;
    vector<string> result; 
    for (int i = 0; i < length; i++) {
        result.push_back(nums[i]);
    }
    
    for(string item: result) {
        cout << item << endl;
    }
    
    return 0;
}
出力:
one
two
three

コンストラクタ

2つ目は、コンストラクタを使う方法です。

まず、「vector<T> name(); 」のように、コンストラクタを呼び出します。

そして、コンストラクタの第1引数に対象のVectorから呼び出したbegin()、第2引数にVectorから呼び出したbegin()にNを足した結果を指定します。

//T=要素の型, myVect=対象のVector, N=取得する要素数
vector<T> result(myVect.begin(), myVect.begin() + N); 

上記の範囲コンストラクタは、対象のVectorの先頭からN個の要素を取得します。

使用例

#include <iostream>
#include <vector>
using namespace std;

int main(void){
    
    vector<string> nums = { "one", "two", "three", "four", "five", "six", "seven"};
    
    int n = 3;
    auto first = nums.begin();
    vector<string> result(first, first + n); 
    
    for(string item: result) {
        cout << item << endl;
    }
    
    return 0;
}
出力:
one
two
three

std::copy_n()

3つ目は、std::copy_n()を使う方法です。

まず、取得する要素数がサイズのVectorを用意します。

次に、std::copy_n()を呼び出します。

std::copy_n()の第1引数に対象のVectorのイテレータの先頭、第2引数に取得する要素数を指定します。

そして、std::copy_n()の第3引数に用意したVectorのイテレータの先頭を指定します。

//T=要素の型, myArray=対象の配列, N=取得する要素数
std::vector<T> result(N); 
std::copy_n(myVect.begin(), N, result.begin());

上記のcopy_n()は、用意したVectorに先頭からN個の要素を格納します。

使用例

#include <iostream>
#include <vector>
using namespace std;

int main(void){
    
    vector<string> nums = { "one", "two", "three", "four", "five", "six", "seven"};
    
    int n = 3;
    vector<string> result(n); 
    copy_n(nums.begin(), n, result.begin());
    
    for(string item: result) {
        cout << item << endl;
    }
    
    return 0;
}
出力:
one
two
three

まとめ

Vectorの先頭からN個の要素を取得する方法は、次の3つです。

  • for文を使う方法
    vector<T> result;
    for (int i = 0; i < length; i++) { result.push_back(myVect[i]); }
  • コンストラクタを使う方法
    vector<T> result(myVect.begin(), myVect.begin() + N);
  • std::copy_n()を使う方法
    std::vector<T> result(N);
    std::copy_n(myVect.begin(), N, result.begin());

コメント

タイトルとURLをコピーしました