即使我在stl c ++中使用push_back,输出总是为零?

时间:2015-11-09 10:50:32

标签: c++ stl

我是STL的新手,我无法弄清楚为什么输出0。 push_back不会将i的值添加到向量n

#include <bits/stdc++.h>
#define _ ios::sync_with_stdio(0);cin.tie(0);

using namespace std;
/*macros*/
#define fi(i,a,b) for(int i=a;i<b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
#define pb push_back
#define min(a,b) ((a<b)?a:b)
#define max(a,b) ((a<b)?b:a)

/*data types*/ 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<ll> vll;
typedef set<int> si;
typedef set<ll> sll;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

int main()
{ _
    vi n(10);
    fi(i,0,10)
    {
        n.push_back(i);
    }
    fi(i,0,10)
        cout << n[i] << endl;
    return 0;
}

输出:

0
0
0
0
0
0
0
0
0 
0

我已经查看了topcoder教程中的其他资源以及有关stackoverflow的其他问题,我知道vector<int> n(10)默认情况下将10个索引vector初始化为0,但为什么上面的代码没有放置{{1}值返回矢量并更新矢量。

3 个答案:

答案 0 :(得分:3)

您的第一个声明:vi n(10);使用10 int初始化您的向量。

当您使用push_back时,实际上是在为向量添加值(索引10到19)。在第一个循环之后,向量中有20个元素。所以,你的第二个循环只显示10个第一个元素。

而是在您的第一个n[i] = i;循环

中执行以下操作:for

顺便说一下,你不应该像你一样使用tydedef和宏,这是非常令人困惑的(也是不好的做法)。

答案 1 :(得分:2)

你告诉矢量将10个零置入其中。然后你推更多的价值观。然后列出前10个。当然,你只能获得10个零。

您在预留空间以填充矢量时感到困惑。

另外,不要像这样使用宏和typedef。第一次任何人都必须处理你的代码(就像现在一样),他们会有很大的冲动打你。它完全不可读,特别是_宏。

答案 2 :(得分:1)

TL; DR:push_back在向量的末尾添加一个新元素,因此元素10-19,它不会替换您最初放入的零。