河北省网站建设公司,住房和城乡建设部网站安广东省,wordpress大前端主题怎么样,品牌建设的最高境界是什么文章目录方式一#xff1a;值传递遍历方式二#xff1a;引用传递遍历方式三#xff1a;使用迭代器遍历方式四#xff1a;结构化绑定(c17特性)结构化绑定示例#xff08;1#xff09;元组tuple结构化绑定#xff08;2#xff09;结构体结构化绑定#xff08;3#xff…
文章目录方式一值传递遍历方式二引用传递遍历方式三使用迭代器遍历方式四结构化绑定(c17特性)结构化绑定示例1元组tuple结构化绑定2结构体结构化绑定3数组结构化绑定4普通变量结构化绑定下面的示例都是以下列定义的map为例。
#includeiostream
#includeunordered_map
using namespace std;unordered_mapint, int map {pairint, int(1, 2),pairint, int(3, 4),pairint, int(5, 6)};方式一值传递遍历
使用pair的形式进行值传递。 for (pairint, int kv : my_map) {cout kv.first kv.second endl;}使用auto的形式进行值传递。 for (auto kv : my_map) {cout kv.first kv.second endl;}方式二引用传递遍历
使用pair的形式进行引用传递。
如果使用pair进行引用传递必须添加const不然会报错const既可以添加在pair前边也可以添加至键前面但是它们有区别。
const添加在pair前面时键和值都不可以发生改变如下所示。 for (const pairint, int kv : my_map) {//kv.second 3;//pair前边添加const不可以改变它的值//kv[7] 9 //pair前边添加const不可以添加多余的键cout kv.first kv.second endl;}const添加在pair的key前边my_map不可以添加新的键值对但可以改变原先的值如下所示。 for (pairconst int, int kv : my_map) {kv.second 3;//只对key做const可以改变其值// kv[7] 9 //pair前边添加const不可以添加多余的键cout kv.first kv.second endl;}使用auto的形式进行引用传递。 for (auto kv : my_map) {kv.second 3;cout kv.first kv.second endl;}方式三使用迭代器遍历
使用自定义迭代器遍历。 for (unordered_mapint, int::iterator it my_map.begin(); it ! my_map.end(); it) {cout it-first it-second endl;}使用auto迭代器遍历。 for (auto it my_map.begin(); it ! my_map.end(); it) {cout it-first it-second endl;}方式四结构化绑定(c17特性)
需要另外说明的是auto[]绑定方式不仅适用于pair形式还适用于tuple形式搬砖的效率又提高了。。。
值传递的结构化绑定。 for (auto [k, v] : my_map) {cout k v endl;}引用传递的结构化绑定 for (auto [k, v] : my_map) {cout k v endl;}只需要键的结构化绑定 for (auto [k, _] : my_map) {cout k k endl;}只需要值的结构化绑定 for (auto [_, v] : my_map) {cout v v endl;}结构化绑定示例
1元组tuple结构化绑定
普通tie形式
# includeiostream
# includetupleint main()
{std::tuplestd::string, std::string, int my_tuple(xiaoming, man, 20);std::string name;std::string gender;int age; std::tie(name, gender, age) my_tuple;std::cout name gender age std::endl;;
}结构化绑定形式
# includeiostream
# includetupleint main()
{std::tuplestd::string, std::string, int my_tuple(xiaoming, man, 20);auto [name, gender, age] my_tuple;std::cout name gender age std::endl;;
}2结构体结构化绑定
# includeiostreamstruct s {std::string name xiaoming;std::string gender man;int age 20;
};
int main()
{s my_struct;auto [name, gender, age] my_struct;std::cout name gender age std::endl;;
}3数组结构化绑定
使用数组结构化绑定的时候元素个数也要严格对齐。
# includeiostreamint main()
{int a[2] {1,2};auto [x,y] a;
}4普通变量结构化绑定
int a 1, b 2;
const auto [x, y] std::tie(a, b); // x 与 y 类型为 int