c++ - 为 vector 成员提供默认值并更新元素

标签 c++ arrays vector

我不确定为此需要 vector ,但我认为我不能使用数组,因为我没有固定大小。

我有一个单例类 Song其中有一个成员 vector<float> samples;和一种方法 getSamples(int numberOfSamples)调用此方法时,我想让 vector 的大小正确(基于 numberOfSamples ),而不是可能多次更新它的某些值。

vector<float> &Song::getSamples(int numberOfSamples){
    for(int i = 0; i < numberOfFrames; i++)
        this->samples.push_back(0);
}

例如,如何将第 3 个值从 0 更改为 3?使用数组会容易得多,做类似 samples[2] = 3; 的事情但问题是在调用 getSamples 方法之前我不知道 vector/数组的长度。而且我认为不断迭代不是一个好主意,因为 numberOfSamples可能会很大,我可能需要将每个值更新多达五次。

最佳答案

你可以简单地resize vector ,它将值初始化(默认为 T(),对于 float 将是 0.0)所有新值:

vector<float> &Song::getSamples(int numberOfSamples){
    this->samples.resize(this->samples.size() + numberOfFrames);
    // did you mean numberOfSamples instead of numberOfFrames, there?
}

要为给定索引设置值,您可以像普通 C 数组一样使用下标运算符:

this->samples[2] = 3;

关于c++ - 为 vector 成员提供默认值并更新元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11819325/

相关文章:

python - 在 Python 中通过引用将一个列表的元素存储在另一个列表中?

c++ - vector 问题,如何删除 vector 中的数组?

c++ - 在不影响原始变量的情况下删除对变量的引用

c++ - 巨大阵列中的访问冲突?

c++ - 类组合 - 无法从 'int' 转换为类

c++ - 如何创建没有窗口框架的应用程序

java - java中的可变字节数组

c++ - 初始化指向多维数组的动态指针的正确方法?

javascript - 组合数组删除重复项的最有效方法

c++ - 使用自定义分配器修改增长策略