gpt4 book ai didi

c++ - 在通过引用传递的 vector 上使用 .size() 成员函数

转载 作者:行者123 更新时间:2023-11-27 22:57:25 26 4
gpt4 key购买 nike

我对 vector 的 .size() 成员函数的用法有些困惑。

所以我拥有的是一个按顺序显示一系列位图的对象,这些位图作为指针存储在 vector 中。然后在我的“动画”对象的构造中通过引用“&”传递该 vector ,该对象通过位图循环执行所有工作。

除了在我引用的位图指针 vector 上调用 .size() 之外,一切都按我预期的那样进行,虽然我知道该 vector 有内容,但它不会返回任何内容。

然后这会导致动画正常循环,然后由于 .size() 不返回任何内容而尝试访问超出范围的元素而跳闸,搞乱了我的边界检查。

我唯一的猜测是我的语法不正确,或者我没有正确理解用法。

#include "animation.h"
#include "helperFunctions.h"
#include <vector>
#include <iostream>

animation::animation(int x, int y, SDL_Renderer* screenRenderer, std::vector<SDL_Texture*>& sprites) {
_x = x;
_y = y;
_sprites = &sprites;
_frames = sprites.size() - 1;///this is to be used as an indexer, eg. 0 frames is 1 in reality, 3 is 4...
_currentFrame = 0;///first frame index
mainScreen = screenRenderer;
_finished = false;
}

animation::animation(const animation& orig) {

}

animation::~animation() {
std::cout << "animation object deleted!" << std::endl;
}

void animation::cycleFrame() {
applyTexture(_x, _y, (*_sprites)[_currentFrame], mainScreen);
std::cout << "_currentFrame: " << _currentFrame << std::endl;
std::cout << "_frames : " << _frames << std::endl;
_currentFrame++;
if (_currentFrame == _frames) {
_finished = true;
}
}

另外我应该补充一点,我不是在寻求任何 SDL 方面的帮助,只是整个 vector.size() 的事情。

提前致谢,如有任何帮助,我们将不胜感激。

更新:

所以我做了一些挖掘,似乎 .size() 在 vector 被传递给构造函数之前也在 vector 上返回 0 ...在 main() 中我有:

std::vector<SDL_Texture*> explosion16;        
explosion16.reserve(16);
for (int i = 0; i < 16; i++) {
explosion16[i] = loadTexture(loadImage("gfx/explosions/explosion_16/e" + to_string(i) + ".bmp"));
}
cout << "explosion16.size() : " << explosion16.size() << endl;/////this returns as zero, 0

最佳答案

根据您的评论:如果您使用 reserve(),则不会增加大小,只会增加容量。您应该使用 resize(),然后使用索引器来初始化成员,或者保留 reserve 并改用 push_back() []

关于c++ - 在通过引用传递的 vector 上使用 .size() 成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31406087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com