C ++の基本を学んで、ベクトル、イテレータ、素晴らしい解釈

免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
このリンク: https://blog.csdn.net/qq_40666620/article/details/102769666
定義と初期化
	//vector里面能装任何类型,但是不能装引用,因为引用就不是一个类型

	//定义和初始化
	vector<string> myVector1;
	myVector1.push_back("abc");
	myVector1.push_back("def");

	//拷贝
	vector<string> myVector2(myVector1);
	vector<string> myVector3 = myVector1;

	//C++11列表初始化
	vector<string> myVector4{ "abc","def","ghi" };

	//创建制定数量的元素,有元素数量的东西,一般用圆括号
	vector<string> myVector5(10, "abc");//里面有10个string "abc"
	vector<string> myVector6(10);//不指定元素内容,为默认值,如0,空串

	//{}一般表示元素内容
	//五花八门的初始化方式
	vector<string> myVector7{ 10 };//这一个也是10个空串,不要为什么,就是这样设计的
	vector<string> myVector8{ 10,"hello_world" };//10个hello_world
ベクトルのいくつかの一般的な方法
	//vector常用方法
	vector<int> myVector9;
	//是否为空
	myVector9.empty();
	//末尾加上元素
	myVector9.push_back(1);
	//清空
	myVector9.clear();
	//在某个位置插入一个元素
	myVector9.insert(myVector9.begin(), 1);
	//访问下表为i的元素
	myVector9[0];
	//重新赋值
	myVector9 = { 1,2,3,4,5 };
以下のための範囲
	vector<int> myVector10 = { 1,2,3,4,5,6,7,8,9 };
	//使用引用,提升效率
	for (auto& x : myVector10)
	{
		cout << x << endl;
	}

イテレータ

ユースケース

	vector<int> myVector11 = { 1,2,3,4,5,7,8,9,10 };
	vector<int>::iterator vectorItem;
	vectorItem = myVector11.begin();//vector的第一个元素
	//end指的不是最后一个元素,而是最后一个元素的后面的一个元素	
	//所以vector为空的时候,end==begin
	while (vectorItem != myVector11.end())
	{
		//因为迭代器本身就是一个指针
		cout << *vectorItem << endl;
		vectorItem++;
	}
  • リバースイテレータ
	for (vector<int>::reverse_iterator myItem = myVector11.rbegin(); myItem != myVector11.rend(); myItem++)
	{
		cout << *myItem << endl;
	}
  • どのようなベクトルの構造を使用するイテレータを説明します
struct student
{
	int num;
	string name;
};
int main()
{
	//声明一个迭代器,装的是结构体
	vector<student> mystudentVector;
	//声明一个未初始化的结构体
	student mySudent;
	//进队列
	mystudentVector.push_back(mySudent);
	//声明迭代器
	vector<student>::iterator myStudentIterator;
	//给迭代器赋值
	myStudentIterator = mystudentVector.begin();


	//一下可以充分理解,迭代器到底是怎么用的
	//找到结构体中的变量有两个方法,都是基于迭代器是指针的原理
	myStudentIterator->name = "william_x_f_wang";
	//都过*直接找到该指针指向的对象
	(*myStudentIterator).num = 1;
}
  • const_iteratorの
    const_iterator,该迭代器指向的值不能改变,也就是只能读不能改,但是本身的指向是可以修改的,如果迭代器本身就是const的话,就只能用const_iterator
	vector<int> myVector = { 1,2,3,4,5 };
	vector<int>::const_iterator myConstIterator = myVector.begin();
	cout << *myConstIterator << endl;
  • cbegin()、CEND()は、一定のイテレータを返します
	//cbegin(),cend(),返回常量迭代器
	vector<int> myVector12 = { 1,2,3,4,5,6 };
	//这个常量迭代器就不能更改内容了
	for (auto iter = myVector12.cbegin(); iter != myVector12.cend(); iter++)
	{

	}
  • iteratorメソッドのすべての要素を削除し、プログラムがクラッシュしません
	vector<int> myVector13 = { 1,2,3,4,5,7,8,9,10 };
	auto iter1 = myVector13.begin();
	while (iter1 != myVector13.end())
	{
		//begin的返回值是下一个位置
		iter1 = myVector13.erase(iter1);
	}
	myVector13.clear();
  • イテレータと文字列を横断
	string myString = "i love china";
	for (auto myIter = myString.begin(); myIter != myString.end(); myIter++)
	{
		*myIter = toupper(*myIter);
	}
	for (auto myIter = myString.begin(); myIter != myString.end(); myIter++)
	{
		cout << *myIter << endl;
	}

おすすめ

転載: blog.csdn.net/qq_40666620/article/details/102769666