Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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++ 为什么vector.push_back(s)在这里不起作用,但vector[i]=s起作用(作为注释提及)?_C++_Vector_Stl_Push Back - Fatal编程技术网

C++ 为什么vector.push_back(s)在这里不起作用,但vector[i]=s起作用(作为注释提及)?

C++ 为什么vector.push_back(s)在这里不起作用,但vector[i]=s起作用(作为注释提及)?,c++,vector,stl,push-back,C++,Vector,Stl,Push Back,为什么vector.push_backs在这里不起作用,但vector[i]=s作为注释起作用?如果我使用push_back功能,则不会打印任何内容。vec[i]=s工作得很好,但为什么推回不起作用?我希望这两个备选方案都能同样好地运行,即在二维向量中打印存储的元素 #include<iostream> #include<vector> #include<utility> #include<stack> #include<queue>

为什么vector.push_backs在这里不起作用,但vector[i]=s作为注释起作用?如果我使用push_back功能,则不会打印任何内容。vec[i]=s工作得很好,但为什么推回不起作用?我希望这两个备选方案都能同样好地运行,即在二维向量中打印存储的元素

#include<iostream>
#include<vector>
#include<utility>
#include<stack>
#include<queue>

using namespace std;

int main()

{

int n;
cin>>n;
vector<vector<pair<int,int>>> vec(n);
for(int i=0;i<n;i++)
{
    int m;
    cin>>m;
    vector<pair<int,int>> s;
    for(int j=0;j<m;j++)
    {
        int x;
        cin>>x;
        s.push_back(make_pair(x,i+1));
    }
    vec.push_back(s);//vec[i]=s works here :-(
}

for(int i=0;i<n;i++)
    for(int j=0;j<vec[i].size();j++)
        cout<<vec[i][j].first<<" ";
        

return 0;
}
您可以在此处创建包含n个元素的向量:

vector<vector<pair<int,int>>> vec(n);
通常,将容器的大小与容器的大小分开记录是一个非常糟糕的主意。如果需要知道其大小,请使用.size


最后但并非最不重要的一点是,使用调试器,您可以观察到代码中发生了什么。

因为您已经创建了包含n个元素的向量向量,所以“向后推”将在前n个元素之后添加更多元素。所以,要么改变vecn;到vec;或者使用注释vec[i]中的方式而不是vec.push_back.Hello,欢迎使用堆栈溢出!我理解你的问题有点困难。你能重新设计这个问题来具体解决A:你期望什么,B:你得到了什么,C:你尝试了什么?如果你能用这种方式明确地说出问题所在,你就更有可能得到帮助。也考虑阅读,它有一些很棒的提示来帮助我们帮助你!@国家编码员:你好!谢谢你的评论。我编辑了这个问题,这可能会提高你对这个问题的理解。请让我知道是否有什么可以让它变得更好:@AMITPRASAD,也许这个问题的更好标题是vector.push_backVALUE和vector[INDEX]=VALUE?之间的区别是什么?。我认为这将有助于其他人了解你在哪里需要帮助。我们喜欢避免这样的问题,例如为什么这个问题不起作用,因为这个问题没有直接解决问题。当我读到这个问题时,我仍然不确定你期望的是什么。当你说这在这里有效时,有效是什么意思?预期的行为是什么?不仅我期望它们是等价的,而且你期望具体发生什么。
for(const auto& row : vec) {
    for(cons auto& entry : row) {
        std::cout<<entry.first<<" ";
    }
}