我注意到如果我使用push_back在向量中插入int,我会得到1的答案,但是如果我通过vector [0]将整数插入到我的向量中,我会得到正确的答案。我的问题是,push_back做的更多,然后只是将我的整数插入到向量中吗?
#include<vector>
#include<iostream>
using namespace std;
typedef vector<int> vi;
class KeyDungeonDiv2 {
public:
int countDoors(vi doorR, vi doorG, vi keys)
{
int r = keys[0];
int g = keys[1];
int w = keys[2];
int numdoors = 0;
for(int i = 0; i < doorR.size(); i++) {
if(r >= doorR[i] && g >= doorG[i])
numdoors++;
else if (r < doorR[i] && g >= doorG[i]) {
if(r + w >= doorR[i]) {
numdoors++;
}
}
else if(r >= doorR[i] && g < doorG[i]) {
if(g + w >= doorG[i]) {
numdoors++;
}
}
else if (r < doorR[i] && g < doorG[i]) {
if(w >= (doorR[i] - r ) + (doorG[i] - g)) {
numdoors++;
}
}
else if(doorR[i] == 0 && doorG[i] == 0)
numdoors++;
}
return numdoors;
}
};
int main()
{
vector<int> redDoors (4);
redDoors[0] = 2;
redDoors[1] = 0;
redDoors[2] = 5;
redDoors[3] = 3;
vector<int> greenDoors(4);
greenDoors[0] = 1;
greenDoors[1] = 4;
greenDoors[2] = 0;
greenDoors[3] = 2;
vector<int> keys (3);
keys[0] = 2;
keys[1] = 3;
keys[2] = 1;
KeyDungeonDiv2 d;
cout << d.countDoors(redDoors,greenDoors,keys) << endl;
return 0;
}
---- ---- VS
vector<int> redDoors (4);
redDoors.push_back(2);
redDoors.push_back(0);
redDoors.push_back(5);
redDoors.push_back(3);
vector<int> greenDoors(4);
greenDoors.push_back(1);
greenDoors.push_back(4);
greenDoors.push_back(0);
greenDoors.push_back(2);
vector<int> keys (3);
keys.push_back;
keys.push_back(3);
keys.push_back(1);
答案 0 :(得分:4)
vector<int>::push_back
方法将始终添加到向量中,因此当您使用push_back
方法时,您实际上将向量的大小增加了一个。
接受size_t
对象的构造函数正在设置向量的初始大小,但是使用默认构造对象填充它。
所以你正在做的是:
vector<int> redDoors(4);
// redDoors = [ 0 | 0 | 0 | 0 ]
redDoors.push_back(2);
// redDoors = [ 0 | 0 | 0 | 0 | 2 ]
redDoors.push_back(0);
// redDoors = [ 0 | 0 | 0 | 0 | 2 | 0 ]
// ... and so on...
您需要做的只是使用向量的默认构造函数。 e.g。
vector<int> redDoors;
如果您需要优化,可以使用reserve
方法预先分配内存,这是我假设您要尝试的内容。
答案 1 :(得分:3)
在第二个中,您正在创建一定大小的向量。然后你使用push_back。这是将值插入向量的末尾。向量键以3开头,然后当你进行3次push_back调用时,向量将有6个元素。
不要将矢量初始化为起始大小。对于矢量键,请执行以下操作:
vector<int> keys;
然后您可以使用
keys.push_back(5);
将数据插入到矢量中。
答案 2 :(得分:3)
push_back()
将元素插入容器中。要获得与在构造函数中设置大小相同的结果,然后设置值,您需要将初始向量构造为空,例如:
std::vector<int> redDoors;
答案 3 :(得分:1)
Push_back在向量的末尾插入一个元素。但是如果向量已满,它会分配具有增加容量的新内存并将向量复制到新内存。 但是你正在创建具有初始大小的向量。您需要在没有这些初始尺寸的情况下创建它们,如下所示
std::vector<int> foo;
答案 4 :(得分:1)
push_back
方法将给定元素值附加到容器的末尾。
explicit vector( size_type count );
类型的constructor
使用计数值初始化(默认构建,对于类)T实例构建容器。不会创建副本。
所以当你这样做时:
vector<int> redDoors (4); // Create a vector of 4 ints initialized at 0
redDoors.push_back(2); // Adds 2 at the end
redDoors.push_back(0); // Adds 0 at the end
redDoors.push_back(5); // Adds 5 at the end
redDoors.push_back(3); // Adds 3 at the end
// Result :
// [ 0, 0, 0, 0, 2, 0, 5, 3 ]
如果您想要与使用operator[]
访问向量时的行为相同,请执行以下操作:
vector<int> redDoors; // Just create a vector
redDoors.push_back(2); // Adds 2 at the end
redDoors.push_back(0); // Adds 0 at the end
redDoors.push_back(5); // Adds 5 at the end
redDoors.push_back(3); // Adds 3 at the end
// Result :
// [ 2, 0, 5, 3 ]