c++ vector 使用 push_back

标签 c++ arrays vector int

我注意到,如果我使用 push_back 在 vector 中插入整数,我得到的答案会减去 1,但如果我通过 vector[0] 将整数插入我的 vector 中,我会得到正确的答案。我的问题是,除了将我的整数插入 vector 之外,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;
}

----对比----

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);  

最佳答案

vector<int>::push_back方法将始终添加到 vector 中,因此当您使用 push_back 时方法,实际上是将 vector 的大小增加一个。

构造函数接受 size_t object 正在设置 vector 的初始大小,但使用默认构造的对象填充它。

所以你正在做的是:

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...

您需要做的只是为您的 vector 使用默认构造函数。例如

vector<int> redDoors;

如果你需要优化,你可以使用 reserve预分配内存的方法,我假设您正在尝试这样做。

关于c++ vector 使用 push_back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302030/

相关文章:

javascript - 附加到一个不是数组的 JS 对象?

python 3 : Multiply a vector by a matrix without NumPy

c++ - 为什么编译器允许在 C++ 中使用 vector.begin()=vector.end()?

c++ - 一个有两个名字的类(class)?

c++ - 关于 C++ STL 中的类型

c++ - 将txt文件加载到2个用逗号分隔的暗淡数组中 C++

C++ if/else 网格系统

arrays - React Native - 使用带有 FlatList 的 keyExtractor

没有STL的C++动态数组

c++ - 初始化 vector (C++)