做的网站怎么联网,可以发描文本的网站,手表网站模板,软文推广策划方案STL迭代器的应用 迭代器的定义方法#xff1a;
类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭…STL迭代器的应用 迭代器的定义方法
类型作用定义方式正向迭代器正序遍历STL容器容器类名::iterator 迭代器名常量正向迭代器以只读方式正序遍历STL容器容器类名::const_iterator 迭代器名反向迭代器逆序遍历STL容器容器类名::reverse_iterator 迭代器名常量反向迭代器以只读方式逆序遍历STL容器容器类名::const_reverse_iterator 迭代器名 迭代器与自动类型推导C11引入了auto关键字用于自动类型推导可简化记忆复杂的数据类型名自动类型推导要求变量必须进行初始化。语法为auto 变量名值。 迭代器本身不支持输入和输出因此不能像指针一样输出查看其地址。 在对迭代器所指向的元素进行操作时必须像指针一样对迭代器进行解引用操作即*迭代器名。若对迭代器指向的元素进行修改则与指针一样其实际的值也会被修改。 特殊位置的迭代器 类名.begin()正向迭代器指向容器正向上首个位置的迭代器 类名.cbegin()常量正向迭代器其余与begin相同类名.end()正向迭代器指向容器正向上末个位置的下一个位置的迭代器 类名.cend()常量正向迭代器其余与end相同类名.rbegin()反向迭代器指向容器反向上首个位置的迭代器 类名.crbegin()常量反向迭代器其余与rbegin相同类名.rend()反向迭代器指向容器反向上末个位置的下一个位置的迭代器 类名.crend()常量反向迭代器其余与rend相同 迭代器与指针一样支持算数运算。迭代器的算数运算具有方向性在进行算数运算时运算方向沿着迭代器的方向。 如正向迭代器进行时为沿着正向进行即移动到当前迭代器的下一个位置反向迭代器进行时为沿着反向进行相对于正向而言实际是移动到了当前的前一个位置。 获取迭代器的位置使用std::distance(迭代器1,迭代器2)为迭代器2-迭代器1。 基于范围的for循环C11引入了基于范围的for循环用于更简便的正序遍历容器(包括C数组)但不支持逆序遍历容器。在基于范围的for循环中循环变量就是元素本身无需再进行解引用操作。若需要在基于范围的for循环中对元素进行修改可与引用进行配合使用。循环头的语法为 for (auto element : container) {//element直接表示容器中的每一个元素无需再进行解引用。container既可以为STL序列容器也可以是C数组
}
for (auto element : container) {//element表示容器中的每一个元素的引用通过修改引用可直接修改容器内元素
}迭代器应用实例
此处仅为说明迭代器作用而举例实际上vector的I/O方法并不止这些。
一维vector的正序输入、正序输出
手动定义迭代器
vectorintv(10);
for(v::iterator iv.begin();i!v.end();i)cin*i;//注意必须解引用迭代器否则会报错。对迭代器指向的元素进行操作元素实际值会改变
for(v::iterator iv.begin();i!v.end();i) cout*i;自动类型推导定义的迭代器
vectorintv(10);
for(auto iv.begin();i!v.end();i) cin*i;
for(auto iv.begin();i!v.end();i) cout*i;基于范围的for循环
vectorintv(10);
for(auto i:v){cini;
}
for(auto i:v){couti;
}基于范围的for循环(C数组)
int a[10];
for(auto i:a){cini;
}
for(auto i:a){couti;
}一维vector的逆序输入、逆序输出
手动定义迭代器
vectorintv(10);
for(v::iterator iv.rbegin();i!v.rend();i)cin*i;//注意必须解引用迭代器否则会报错。对迭代器指向的元素进行操作元素实际值会改变
for(v::iterator iv.rbegin();i!v.rend();i) cout*i;自动类型推导定义的迭代器
vectorintv(10);
for(auto iv.rbegin();i!v.rend();i) cin*i;
for(auto iv.rbegin();i!v.rend();i) cout*i;二维vector的正序输入、正序输出
手动定义迭代器
vectorvectorintv(3,vectorint(3));
for(vectorvectorint::iterator jv.begin();j!v.end();j)for(vectorint::iterator ij-begin();i!j-end();i)cin*i;
for(vectorvectorint::iterator jv.begin();j!v.end();j)for(vectorint::iterator ij-begin();i!j-end();i)cout*i;自动类型推导的迭代器
vectorvectorintv(3,vectorint(3));
for(auto jv.begin();j!v.end();j)for(auto ij-begin();i!j-end();i)cin*i;
vectorvectorintv(3,vectorint(3));
for(auto jv.begin();j!v.end();j)for(auto ij-begin();i!j-end();i)cout*i;基于范围的for循环
vectorvectorintv(3,vectorint(3));
for(auto j:v)for(auto i:j)cini;
for(auto j:v)for(auto i:v)couti;基于范围的for循环(C数组)
int a[3][3];
for(auto j:a)for(auto i:j)cini;
for(auto j:a)for(auto i:j)couti;