免責事項:この記事はブロガーオリジナル記事です、続くBY-SAのCC 4.0を著作権契約、複製、元のソースのリンクと、この文を添付してください。
定義と初期化
//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;
}