如何增加向量中数字序列的长度

时间:2019-05-15 12:05:38

标签: c++ r

我正在尝试重写C ++中R的以下代码行

if (l > length(a)) {
  a <- c(a, a + a[length(a)])
}

这里a是一个序列,l是一个整数。我只想检查l是否超出a的索引(即a [l]未定义),如果是这样,我想通过将向量与a + a [length(a)]串联来扩展向量。

在C ++中,我有:

if (l >= a.size()) {
  a.resize(2*a.size());

}

在这里我有'> =',因为索引从0开始,但是我不确定如何初始化我的新值。

例如,如果a =(0.1,0.2,0.3)和l = 4,那么我想将a更改为

a = (0.1, 0.2, 0.3, (0.1+0.3), (0.2+0.3), (0.3+0.3)) 
  = (0.1, 0.2, 0.3, 0.4, 0.5, 0.6)

2 个答案:

答案 0 :(得分:2)

auto size = a.size();
if (l >= size) {
    auto last = a.back();
    for (auto i = 0; i < size; ++i)
        a.push_back(a[i] + last);
}

类似上面的东西?对此可能会有很多变化。

答案 1 :(得分:2)

您可能要考虑l大于size() * 2的可能性:

while(l >= a.size()) { // loop until l < s.size()
    size_t elements = a.size();
    auto last_element = a.back();
    for(size_t e = 0; e < elements; ++e)
        a.push_back(a[e] + last_element);
}