C ++スタディノート5つの標準ライブラリタイプベクトルと文字列

C ++は、intやfloatなどのいくつかの基本的な型に加えて、抽象データ型の豊富な標準ライブラリも定義しています。最も重要な標準ライブラリタイプは文字列とベクトルであり、それぞれ可変サイズの文字列とコレクションを定義します。
1標準ライブラリ文字列型
1.1文字列オブジェクトの定義と初期化

//构造函数是一个特殊的成员函数,定义如何初始化该类型的对象
string s1 // 默认构造函数,s1为空串
string s2(s1) //将s2初始化s1的副本
string s3("value") //将s3初始化一个字符串字面值的副本
string s4(n,'c') //将s4初始化为字符串‘c’的n个副本

1.2文字列オブジェクトの操作

s.empty()     //如果s为空串,则返回true,否则返回false
s.size()      //返回s中字符的个数

文字列のサイズ操作の結果を格納する変数は、string :: size_type型である必要があります。sizeの戻り値をint変数に割り当てないことが特に重要です。(オーバーフローを回避するため)
2標準ベクトル型
ベクトルは同じ型のオブジェクトのコレクションであり、各オブジェクトには対応する整数インデックス値があります。標準ライブラリは、ストレージ要素に関連するコンテンツの管理を担当します。ベクトルはコンテナと呼ばれます。ベクトルを使用するには、std :: vectorを使用して
#include
引用する必要があります。2.1
ベクトルオブジェクトの定義と初期化

vector[T] v1; //vector 保存类型为T的对象。默认构造函数v1为空
vector[T] V2(V1) //V2是v1一个副本
vector[T] v3(n,i) //v3包含n个值为i的元素
vector[T] v4(n);  //v4含有值初始化的元素n个副本

2.2値の初期化
要素の初期化式が指定されていない場合、標準ライブラリは値の初期化のために要素の初期値を提供します。特定の値は、ベクトルに格納されている要素のタイプによって異なります。

vector<int> fvec(10); //十个元素每个元素都是0
vector<string> svec(10);//十个元素每个元素都是空的

2.3ベクトルオブジェクト操作

v.empty   //如果V为空,则返回true,否则返回false
v.size()  //返回V中的元素个数
v.push_back(t) //在V的末尾增加一个值为t的元素

メンバー関数sizeは、対応するベクトルクラスによって定義されたsize_type値を返します

vector<int>::size_type

2.4ベクトルへの要素の追加
push_back()操作は要素値を受け入れ、それを新しい要素としてベクトルオブジェクトの後ろに追加します。
ベクトル内のオブジェクトに対するベクトル添え字操作には名前がなく、ベクトル内のオブジェクトの位置からアクセスできます。通常、添え字演算子を使用して要素を取得します。文字列に似ています。ただし、添え字操作では要素は追加されません

vector<int> ivec;
for(vector<int>::size_type i=0;i != 10;++i)
ivec[i]=i;//这样赋值是错误的,因为ivec是vector对像,下标只能用于获取已存在的元素。
ivec.push_back(i);//正确的赋值方法
//试图对不存在的元素进行下标操作是程序设计过程中严重的错误,可以导致“缓冲区溢出”,一定注意,仅仅能够对确知已存在的元素进行下标操作。

添え字を介してベクトルコンテナの要素にアクセスすることに加えて、コンテナ内の要素を検査して要素をトラバースするデータ型であるイテレータを介して要素にアクセスすることもできます。
標準ライブラリは、コンテナのタイプごとにイテレータタイプを提供します。イテレータは、添え字操作よりも一般的な方法を提供します。

2.5コンテナイテレータタイプ

vector <int> ::iterator iter;   //这条语句定义了一个Iter的变量,它的数据类型是由vector<int>::iterator 类型

ベクトルイテレータタイプは、イテレータが指す要素を取得するためのいくつかの操作を定義し、プログラマがイテレータをある要素から別の要素に移動できるようにします。以下は理解を実践する例です

# include <iostream>
# include<string>
# include<vector>
using namespace std;
int main()
{
    
    
	int i = 0;
	vector<int> vec(10);
	for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++,i++)
	{
    
    
		*iter =i;
		cout << "当前值" << *iter << endl;
		++iter ;
		*iter = i + 1;
		cout << "下一个" << *iter<<endl;

	
	}
	return 0;
}

イテレータをインクリメントすることで、イテレータが指す位置が移動していることがわかります。以下は、イテレータのいくつかの算術演算です。

iter+n iter-n //可以对迭代对象加上或减去一个整型值,这样做将产生一个新的迭代器,其位置在iter所指元素之前(加)或之后(减)n个元素的位置。
iter1-iter2 //计算两个迭代器对象之间的距离,该距离是difference_type的signed类型的值,这里与size_type值相似,也是vector<int> ::difference_type

2.6操作の開始と終了

各コンテナは、イテレータを返すためにbeginとendという名前の関数のペアを定義します。コンテナに要素がある場合、beginによって返されるイテレータは最初の要素を指します。endによって返される要素は、コンテナのどの要素も指していません。最後の要素の次の要素を指しているだけで、番兵として機能します。
以下は、ベクトルコンテナ要素に値を割り当てて出力するルーチンです。イテレータを使用し、size_typeを使用します

# include <iostream>
# include<string>
# include<vector>
using namespace std;
int main()
{
    
    
	int i = 0;
	vector<int> vec;
	for (vector<int>::size_type i=0;i!= 10;i++)
	{
    
    
		vec.push_back(i);
	   vector<int>::iterator iter=vec.begin();
	   iter = iter + i;
	   cout << "the value is " << *iter << endl;

	
	}
	return 0;
}

補足、コンテナサイズの操作

c.szie() //返回容器C中的元素个数,返回类型为 C::size_type
c.max_size() //返回容器C中可容纳的最多元素个数
c.empty() //返回标记容器大小是否为0的布尔值
c.resize(n) //调整容器c长度大小,实施能够容纳n个元素,如果<c.size() ,则删除多余的元素,否则添加采用值初始化的新元素
c.resize(n,t) //调整容器c的大小,使其能够容纳n个元素,所有新添加的元素都为t
//要注意在使用resize时防止迭代器失效

おすすめ

転載: blog.csdn.net/qq_41803340/article/details/108698038