C+中的二维向量迭代+; 我是C++初学者。如何在C++ STL?中迭代二维向量 int main() { vector< vector<int>> vec; for(int i=0;i<vec.size();i++ cout<<vec[i]<<" "<<endl; } intmain() { 向量vec; 对于(int i=0;i

C+中的二维向量迭代+; 我是C++初学者。如何在C++ STL?中迭代二维向量 int main() { vector< vector<int>> vec; for(int i=0;i<vec.size();i++ cout<<vec[i]<<" "<<endl; } intmain() { 向量vec; 对于(int i=0;i,c++,stl,C++,Stl,您可以这样迭代 int main() { vector< vector<int>> vec; for(int i=0;i<vec.size();i++) { for(int j=0;j<vec[i].size();j++) cout<<vec[i][j]<<" "; cout<<endl; } } intmain() { 向量vec; 对

您可以这样迭代

int main()
{
    vector< vector<int>> vec;
    for(int i=0;i<vec.size();i++)
    {
        for(int j=0;j<vec[i].size();j++)
           cout<<vec[i][j]<<" ";
        cout<<endl;
    }
}
intmain()
{
向量vec;

对于(int i=0;i您可以这样迭代

int main()
{
    vector< vector<int>> vec;
    for(int i=0;i<vec.size();i++)
    {
        for(int j=0;j<vec[i].size();j++)
           cout<<vec[i][j]<<" ";
        cout<<endl;
    }
}
intmain()
{
向量vec;

对于(int i=0;i虽然带索引的解决方案肯定是正确的,但以下带range
for
循环的变体更为现代。它的灵活性稍差,但仅使用这些值就可以完美地工作,并且出错的机会更小

intmain(){
std::vec;
//向vec添加一些数据
对于(const auto&v:vec){//重要的是&否则复制内部向量
for(const auto&i:v){

std::cout虽然带索引的解决方案肯定是正确的,但以下带range
for
循环的变体更为现代。它的灵活性稍差,但仅使用这些值就可以完美地工作,并且出错的机会也更小

intmain(){
std::vec;
//向vec添加一些数据
对于(const auto&v:vec){//重要的是&否则复制内部向量
for(const auto&i:v){
std::cout您可以这样使用

std::vector<std::vector<int>> vecOFvec{{1,2},{3,4,5},{6,7,8,9}};

for(const auto& elemOuter:vecOFvec){
    std::cout<<"\n";
    for(const auto& elemInner:elemOuter)
                std::cout<<elemInner<<" ";

}
你可以这样用

std::vector<std::vector<int>> vecOFvec{{1,2},{3,4,5},{6,7,8,9}};

for(const auto& elemOuter:vecOFvec){
    std::cout<<"\n";
    for(const auto& elemInner:elemOuter)
                std::cout<<elemInner<<" ";

}

用于在阵列中创建二维Mattrix

int matt[R][C];
迭代2D数组

for(int r=0; r < R; r++){
   for(int c=0; c<C;c++)
       cout << matt[r][c];
   cout << endl;
}
for(int r=0;rfor(int c=0;c允许在数组中使用2D Mattrix

int matt[R][C];
迭代2D数组

for(int r=0; r < R; r++){
   for(int c=0; c<C;c++)
       cout << matt[r][c];
   cout << endl;
}
for(int r=0;rfor(int c=0;c
for(int i=0;i这能回答你的问题吗?如果没有必要的话,你实际上不应该使用向量。你得到了一个双间接寻址,因为向量数据存储在堆中…所以有很多内存访问操作。这对(int i=0;我可以回答你的问题吗?如果没有必要,实际上不应该使用向量向量。因为向量数据存储在堆中,所以有很多内存访问操作。这样做效率不高,你缺少一个结束
在第一个
处,对于
。如果您不想将第二个
放入自己的块中,我建议您至少缩进该
的第二个
的内部。您缺少一个结束
在第一个
for
。如果您不想将第二个
for
放入自己的块中,我建议您至少缩进第二个
的内部主体。内部循环上的
&
仍然是合理的。此代码块现在可以在任何库(或类似库)中重复使用容器来打印任何包含
运算符的内容,这是正确的,但我认为对于标量类型,按值获取实际上更有效。但是当然
&
是一个很好的默认值,特别是如果我们想进行更改,我总是这样做。一天结束时,很大程度上取决于编译器将如何进行优化。对于一个
常量
引用和一个没有改变的小副本,行为是相同的,因此一个好的编译器可能会产生相同的输出。内部循环上的
&
仍然是合理的。这段代码现在可以被任何库(或类似库)重用容器来打印任何包含
运算符的内容,这是正确的,但我认为对于标量类型,按值获取实际上更有效。但是当然
&
是一个很好的默认值,特别是如果我们想进行更改,我总是这样做。一天结束时,很大程度上取决于编译器将如何进行优化。对于一个
const
引用和一个没有改变的小副本,行为是相同的,因此一个好的编译器可能会产生相同的输出。