【发布时间】:2023-03-18 12:21:01
【问题描述】:
由于某种原因,我的向量和对容器在运行时输出“0”,而不是“输入”的值。这与我声明容器大小的方式有关吗?我也不确定是否正确使用了 emplace_back 函数。
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
class Graph {
private:
int n, h, input;
vector< pair <int,bool> > couple;
vector <int> vec;
public:
Graph(vector<int> getVec, int getN, int getH) : vec{move(getVec)}, n(getN), h(getH){
vec.resize(n*n);
couple.resize(n*n);
for (int i = 0; i < vec.size(); ++i){
cin >> input;
vec.push_back(input);
couple.emplace_back(make_pair(vec[i], false));
// cout << vec[i];
cout << couple[i].first;
}
};
};
int main()
{
int N, H, input;
cin >> N >> H;
vector <int> vector;
Graph g (vector, N, H);
}
【问题讨论】:
-
push_back附加到向量的末尾。您将向量的大小调整为(错误的)大小,然后附加到该向量的末尾(这显然不会改变第一个n*n条目) -
push_back表示在容器末尾添加另一个元素。当您调整矢量大小时,元素被初始化为零,这就是您要打印的内容 -
也不清楚为什么你使用大小
n*n而不是n*h,或者为什么你会move(getVec)然后试图覆盖你刚搬进来的东西 -
emplace_back()用于构造元素并插入它。您已经使用make_pair()构造了对,因此您可以直接使用push_back()插入值。您还可以将存储在配对中的值(vec[i]和false)传递给emplace_back(),后者会将它们转发给配对的构造函数,以使用这些值构造配对。 -
在使用 I/O 时,我发现最好先收集数据,然后调用构造函数。而不是在构造函数中发生 I/O。