C++ 使用c+迭代向量矩阵+;自动范围和结构化绑定?

C++ 使用c+迭代向量矩阵+;自动范围和结构化绑定?,c++,c++17,std,C++,C++17,Std,我想这样做: vector<vector<int>>& matrix; -> [[1, 1], [2, 2]] for (auto [a, b] : matrix) { ... } 向量和矩阵;->[[1, 1], [2, 2]] 用于(自动[a,b]:矩阵){ ... } 这不适合我。这是正确的方法吗?如果不是,为什么? < P>以上的方法只对C++中的映射进行迭代是有效的。如果d是无序映射,那么它可以通过下面的代码进行迭代 for(auto

我想这样做:

vector<vector<int>>& matrix; -> [[1, 1], [2, 2]]

for (auto [a, b] : matrix) {
    ...
}
向量和矩阵;->[[1, 1], [2, 2]]
用于(自动[a,b]:矩阵){
...
}

这不适合我。这是正确的方法吗?如果不是,为什么?

< P>以上的方法只对C++中的映射进行迭代是有效的。如果d是无序映射,那么它可以通过下面的代码进行迭代

for(auto& [a,b] : d)
{
    count<< "First" << a.first << "Second" << a.second <<endl;
}
(自动和[a,b]:d)的

{

count您只能将结构化绑定用于存储,存储的位置可以在编译时确定,即绑定到数组或类存储。Vector的数据存储是动态的,您不能绑定到包含相邻元素的内容。 您可以将该列表绑定到现有类型的成员,例如,如果vector包含一对、一个元组或任何类似的结构

#include <string>
#include <vector>
#include <tuple>
#include <iostream>

int main()
{
   std::vector<std::tuple<int,int, std::string>> 
                            v  = {{1,3,"aa"},{3,5,"bb"}};
    
   for(auto& [a,b,s] : v)
   {
       std::cout << a << b << s << std::endl;
   }
   return 0;
}
#包括
#包括
#包括
#包括
int main()
{
向量
v={1,3,“aa”},{3,5,“bb”};
对于(自动和[a,b,s]:v)
{

std::cout不仅是map,而且是任何获得一对或等效元素的容器。例如,在编译期间绑定列表必须对应于类型jnown。这就是为什么它不能用于绑定vector的两个元素
#include <string>
#include <vector>
#include <tuple>
#include <iostream>

int main()
{
   std::vector<std::tuple<int,int, std::string>> 
                            v  = {{1,3,"aa"},{3,5,"bb"}};
    
   for(auto& [a,b,s] : v)
   {
       std::cout << a << b << s << std::endl;
   }
   return 0;
}