Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么可以';我用推回法把值存储在2D向量中吗?_C++_Vector_2d - Fatal编程技术网

C++ 为什么可以';我用推回法把值存储在2D向量中吗?

C++ 为什么可以';我用推回法把值存储在2D向量中吗?,c++,vector,2d,C++,Vector,2d,我遇到了很多问题,我试图在2D向量中存储值。 所以我写了这个简单的代码 我只是在存储和打印我的值: int main() { vector<vector<int>> vec; vector<int> row{1,3,5,7,9,12,34,56}; int i,n,m,rs,vs; rs=row.size(); cout<<"rs = "<<rs<<endl; for(i=0;

我遇到了很多问题,我试图在2D向量中存储值。 所以我写了这个简单的代码

我只是在存储和打印我的值:

int main()
{
    vector<vector<int>> vec;
    vector<int> row{1,3,5,7,9,12,34,56};
    int i,n,m,rs,vs;
    rs=row.size();
    cout<<"rs = "<<rs<<endl;
    for(i=0;i<(rs/2);i++)
    {
        vec[i].push_back(row.at(i));
        vec[i].push_back(row.at(i+4));
    }
    vs=vec.size();
    cout<<vs<<endl;
    for(n=0;n<vs;n++)
    {
        for(m=0;m<2;m++)
        {
            cout<<vec[n][m]<<" ";

        }
        cout<<endl;
    }
    return 0;

}
intmain()
{
向量向量机;
向量行{1,3,5,7,9,12,34,56};
int i,n,m,rs,vs;
rs=行大小();
你应该先读一读

在使用变量时而不是在程序开始时声明变量

向量
vec
在开始时为空。在循环中

for(i=0;i<(rs/2);i++)
{
    vec[i].push_back(row.at(i));
    vec[i].push_back(row.at(i+4));
}
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> row{1,3,5,7,9,12,34,56};
    int rs=row.size();
    std::vector<std::vector<int>> vec;
    std::cout << "rs = " << rs << '\n';
    for(int i = 0; i < rs / 2; ++i)
    {
        vec.push_back({row.at(i), row.at(i+4)});
        //
        // is similar to:
        // vec.push_back({});
        // vec.back().push_back(row.at(i));
        // vec.back().push_back(row.at(i+4));
        //
        // is similar to:
        // vec.push_back({});
        // vec[i].push_back(row.at(i));
        // vec[i].push_back(row.at(i+4));
    }
    int vs = vec.size();
    std::cout << vs << '\n';
    for(int n = 0; n < vs; ++n)
    {
        for(int m = 0; m < 2; ++m)
        {
            std::cout << vec[n][m] << " ";
        }
        std::cout << '\n';
    }
    return 0;
}
但此元素不存在。这是未定义的行为,可能导致分段错误。您可以通过使用所需元素构造向量来修复它

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> row{1,3,5,7,9,12,34,56};
    int rs = row.size();
    std::vector<std::vector<int>> vec(rs / 2);
    std::cout << "rs = " << rs << '\n';
    for(int i = 0; i < rs / 2; ++i)
    {
        vec[i].push_back(row.at(i));
        vec[i].push_back(row.at(i + 4));
    }
    int vs = vec.size();
    std::cout << vs << '\n';
    for(int n = 0; n < vs; ++n)
    {
        for(int m = 0; m < 2; ++m)
        {
            std::cout << vec[n][m] << " ";
        }
        std::cout << '\n';
    }
    return 0;
}

我推荐第一种解决方案。最好为所有元素分配内存并使用它,而不是在每个循环迭代中分配内存。

欢迎使用堆栈溢出!请花一些时间阅读帮助页,特别是部分。您可能还想了解。预期输出和实际输出是什么?
std::vector<std::vector<int>> vec(rs / 2);
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> row{1,3,5,7,9,12,34,56};
    int rs=row.size();
    std::vector<std::vector<int>> vec;
    std::cout << "rs = " << rs << '\n';
    for(int i = 0; i < rs / 2; ++i)
    {
        vec.push_back({row.at(i), row.at(i+4)});
        //
        // is similar to:
        // vec.push_back({});
        // vec.back().push_back(row.at(i));
        // vec.back().push_back(row.at(i+4));
        //
        // is similar to:
        // vec.push_back({});
        // vec[i].push_back(row.at(i));
        // vec[i].push_back(row.at(i+4));
    }
    int vs = vec.size();
    std::cout << vs << '\n';
    for(int n = 0; n < vs; ++n)
    {
        for(int m = 0; m < 2; ++m)
        {
            std::cout << vec[n][m] << " ";
        }
        std::cout << '\n';
    }
    return 0;
}