如何在 C++ 中为向量内的一系列元素赋值?

问题描述 投票:0回答:2

我有一个整数向量,例如

{0, 0, 0, 0, 0}
。我需要将一系列元素的
v[i]
加 1,例如
v[1]
v[3]
,这样我就有了
{0, 1, 1, 1, 0}
。如何做到这一点?

c++ vector stl
2个回答
1
投票

只需使用简单的迭代循环,例如:

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; }
);

在线演示


0
投票

您可以使用

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);
© www.soinside.com 2019 - 2024. All rights reserved.