我有一个整数向量,例如
{0, 0, 0, 0, 0}
。我需要将一系列元素的 v[i]
加 1,例如 v[1]
到 v[3]
,这样我就有了 {0, 1, 1, 1, 0}
。如何做到这一点?
只需使用简单的迭代循环,例如:
std::vector<int> v = {0, 0, 0, 0, 0};
for(size_t i = 1; i <= 3; ++i) {
v[i]++;
}
您也可以使用标准库算法进行复制,例如
std::for_each()
和 std::transform()
,例如:
std::vector<int> v = {0, 0, 0, 0, 0};
std::for_each(v.begin()+1, v.begin()+4,
[](int& i){ ++i; }
);
std::vector<int> v = {0, 0, 0, 0, 0};
std::transform(v.begin()+1, v.begin()+4, v.begin()+1,
[](int i){ return i+1; }
);
您可以使用
std::fill
。
std::vector<int> v = {0, 0, 0, 0, 0};
int i = 1, j = 3; // [start, end]
std::fill(v.begin() + 1, v.begin() + j + 1, 1);
如果您使用 C++20 或更高版本并且喜欢冒险,您可以将此切片存储为视图,然后填充它。
std::vector<int> v = {0, 0, 0, 0, 0};
int i = 1, j = 3; // [start, end]
auto vSlice = ans | std::views::drop(i) | std::views::take(j - i + 1);
std::ranges::fill(vSlice, 1);
// The below line also works
std::fill(vSlice.begin(), vSlice.end(), 1);