2025.2.1(迭代器,auto,for遍历)
迭代器(iterator)
迭代器是cpp中STL的重要组成部分,主要负责数据的遍历以及删改,//迭代器,形如指针,一些地方就是指针,begin返回这块空间开始的迭代器,end是最后一个数据的下一个位置的迭代器,很有可能是'\0',it需要解引用所以真的很像指针。
int main()
{
string s1 = "I Love You";
auto it = s1.begin();
string ::iterator it1 = s1.begin();
while (it != s1.end())
{
cout << *it << ' ';
++it;
}
auto
auto关键字,可以用于声明变量,用于做返回值,但是不能用于传参。auto关键字会自动识别声明的参数所带的值类型,也就是说,如果没有给被auto关键字修饰的参数初始值,会导致报错。auto也可用于函数值的返回。但是通常情况下并不推荐,如果一个函数嵌套了多重其他的函数,且使用了大量的auto,会导致代码混乱,易读性差。auto不能直接声明数组。如果auto和auto*声明指针时没有差别,但是用auto声明引用类型时比如加上&。auto最常用的场景还是变量声明部分。如下图的it和It,参数类型的名字很长,每次写起来都很麻烦,因此直接使用auto就很方便,编译器会自动找到相应的类型。
auto Add(const int a, const int b)
{
return a + b;
}
template <typename A,class B>
A Add(A a, int b)
{
}
int main()
{
auto a = 10;
auto b = a;
auto c = 'x';
//auto y; 报错
string s1 = "abcde";
for (auto ch : s1)
{
cout << ch << endl;
}
cout << Add(a,b) << endl;
std::map<std::string, std::string> dict = { {"1","一"},{"2","二"} };
auto it = dict.begin();
std::map<std::string, std::string>:: iterator It = dict.begin();
return 0;
}
范围for
范围for是c++11引入基于范围的for循环,只要用于有范围的集合。for循环后的括号由“:”分为两部分,前一个部分是for内用于迭代的对象,对标的就是普通for循环中常用的i,后一部分对标的是被迭代的对象。for循环可作用于数组和容器,其本质就是替换了迭代器,利用迭代器进行工作。
string s1 = "I Love You";
for (auto ch : s1)
{
cout << ch << endl;
}