vectorのresizeとassign (C++)
2013年7月20日 コメントを残す
サイズがあらかじめ決まっているvectorの初期化処理でどちらを使うか迷ったのでメモ.
ちなみにVisual Studio 2010で確認.
【resize】
cppreference.comの解説
・resize()呼び出し時のvectorサイズ>指定のサイズ
vectorのサイズが指定の要素数になるまで,erase()で削除.
・resize()呼び出し時のvectorサイズ<指定のサイズ
vectorのサイズが指定の要素数になるまで,初期値で埋める.
【assign】
指定された要素数を指定された値で埋めたvectorを作り直す.
・assign()呼び出し時のvectorサイズ>指定のサイズ
指定されたサイズより大きな部分は削除する.
・assign()呼び出し時のvectorサイズ<指定のサイズ
指定されたサイズまでコンテナサイズを広げる。
【サンプルコード】
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
using namespace std; | |
void dispVec(const vector<int>& vec) | |
{ | |
cout << "===vecの中身===" << endl; | |
for(vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it) | |
{ | |
cout << *it << endl; | |
} | |
cout << "===ここまで===" << endl; | |
} | |
int main(void) | |
{ | |
vector<int> vec; | |
for(int i=0; i<3; ++i) | |
vec.push_back(i); | |
cout << "vec.size() : " << vec.size() << endl; | |
//// 表示例 | |
// vec.size() : 3 | |
dispVec(vec); | |
cout << "\n"; | |
// vectorのサイズよりも大きいサイズ(7)を指定し,初期値(0)で埋める. | |
vec.resize(7, 0); | |
cout << "vec.resize(7,0)" << endl; | |
cout << "vec.size() : " << vec.size() << endl; | |
//// 表示例 | |
// vec.size() : 7 | |
dispVec(vec); | |
//// 表示例 | |
// ===vecの中身=== | |
// 0 | |
// 1 | |
// 2 | |
// 0 | |
// 0 | |
// 0 | |
// 0 | |
// ===ここまで=== | |
cout << "\n"; | |
// vectorのサイズよりも小さいサイズ(4)を指定し,はみ出した部分をerase()で削除する. 初期値は利用されない. | |
vec.resize(4, -3); | |
cout << "vec.resize(4, -3)" << endl; | |
cout << "vec.size() : " << vec.size() << endl; | |
//// 表示例 | |
// vec.size() : 4 | |
dispVec(vec); | |
//// 表示例 | |
// ===vecの中身=== | |
// 0 | |
// 1 | |
// 2 | |
// 0 | |
// ===ここまで=== | |
cout << "\n"; | |
// vectorのサイズよりも大きいサイズ(7)を指定し,指定した要素数を初期値(5)で埋める. | |
vec.assign(7, 5); | |
cout << "vec.assign(7, 5)" << endl; | |
cout << "vec.size() : " << vec.size() << endl; | |
//// 表示例 | |
// vec.size() : 7 | |
dispVec(vec); | |
//// 表示例 | |
// ===vecの中身=== | |
// 5 | |
// 5 | |
// 5 | |
// 5 | |
// 5 | |
// 5 | |
// 5 | |
// ===ここまで=== | |
cout << "\n"; | |
// vectorのサイズよりも小さいサイズ(4)を指定し,指定した要素数を初期値(-3)で埋める. | |
vec.assign(4, -3); | |
cout << "vec.assign(4, -3)" << endl; | |
cout << "vec.size() : " << vec.size() << endl; | |
//// 表示例 | |
// vec.size() : 7 | |
dispVec(vec); | |
//// 表示例 | |
// ===vecの中身=== | |
// -3 | |
// -3 | |
// -3 | |
// -3 | |
// ===ここまで=== | |
return 0; | |
} |