我正在尝试重写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)
答案 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);
}