即使我在 stl c++ 中使用 push_back,输出也始终为零?

what the output is always zero even if i use push_back in stl c++?

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 教程中的其他资源以及 Whosebug 上的其他问题。我知道 vector<int> n(10) 默认将 10 个索引 vector 初始化为 0,但为什么上面的代码没有将 push_back 值放回向量并更新向量?

你的第一个语句:vi n(10); 用 10 int.

初始化你的向量

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

改为执行以下操作:n[i] = i; 在您的第一个 for 循环中

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

你告诉向量将 10 个零放入自身。然后你推动更多的价值。然后你列出前10个。当然你只会得到10个零。

您混淆了保留 space 和填充向量。

另外,不要像这样使用宏和类型定义。其他人第一次不得不处理您的代码时(就像现在),他们会非常想打您的屁股。它完全不可读,尤其是 _ 宏。

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