即使我在 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 不会替换您最初放入其中的零。
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 不会替换您最初放入其中的零。