我是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}值返回矢量并更新矢量。
答案 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,它不会替换您最初放入的零。