【问题标题】:Why vector.push_back(s) does not work here but vector[i]=s works(mentioned as comment)?为什么 vector.push_back(s) 在这里不起作用,但 vector[i]=s 起作用(作为评论提到)?
【发布时间】:2020-09-10 12:50:27
【问题描述】:

为什么vector.push_back(s) 在这里不起作用,而vector[i]=s 起作用(作为评论提及)?如果我使用 push_back 函数,则不会打印任何内容。 vec[i]=s 工作得很好,但为什么 push_back 不工作?我希望这两种替代方案都能同样出色地运行,即在二维向量中打印存储的元素。

#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 个元素创建了向量 vec,push_back 将在这 n 个第一个元素之后添加更多元素。所以,要么改变“vec(n);”到“vec”或者使用注释“vec[i]”中的方式代替vec.push_back()。
  • 您好,欢迎来到堆栈溢出!我在理解你的问题时遇到了一些麻烦。您能否修改问题以具体解决 A:您期望什么、B:您得到什么和 C:您尝试过什么?如果您能以这种方式具体地阐明问题所在,您更有可能获得帮助。还可以考虑阅读stackoverflow.com/help/how-to-ask,它有一些很棒的提示可以帮助我们帮助您!
  • @NativeCoder:你好!感谢您的评论。我已经编辑了可能会提高您对问题的理解的问题。请让我知道是否有任何要添加的内容以使其变得更好:)
  • @AMITPRASAD,也许更好的问题标题是“vector.push_back(VALUE) 和 vector[INDEX]=VALUE 之间有什么区别?”。我认为这将有助于其他人了解您需要帮助的地方。我们喜欢避免诸如“为什么这不起作用”之类的问题,因为这个问题并没有直接解决问题。当我阅读这个问题时,我仍然不确定您的期望。当您说“这在这里有效”时,“有效”是什么意思?预期的行为是什么?不仅仅是“我希望它们是等价的”,而是你希望具体发生什么。

标签: c++ vector stl push-back


【解决方案1】:

您在这里创建一个带有n 元素的向量:

vector<vector<pair<int,int>>> vec(n);

如果您向该向量推送更多n 元素,则它具有2*n 元素,其中第一个n 元素仍然是构造后存在的元素,而最后一个n 元素是您推送的元素。

您刚刚发现了不“手动”编写循环的一大优势。如果你写了,你会看到发生了什么

for(const auto& row : vec) {
    for(cons auto& entry : row) {
        std::cout<<entry.first<<" ";
    }
}

一般来说,将容器的大小与容器分开跟踪是一个非常糟糕的主意。如果您需要知道它的大小,请使用.size()

最后但同样重要的是,使用调试器您可以观察到代码中发生的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-10
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2013-05-16
    • 2019-02-10
    相关资源
    最近更新 更多