我想将一个向量中的值复制到另一个向量中,并将其以特定顺序存储,第二个向量将包含比第一个向量更多的元素。
例如:
vector<int> temp;
temp.push_back(2);
temp.push_back(0);
temp.push_back(1);
int size1 = temp.size();
int size2 = 4;
vector<int> temp2(size1 * size2);
现在我想像这样填充 temp2 :{2,2,2,2,0,0,0,0,1,1,1,1}。
是否可以仅使用算法(例如填充)来做到这一点?
答案 0 :(得分:2)
是的,可以使用std::generate_n
算法:
int main() {
std::vector<int> base{1, 0, 2};
const int factor = 4;
std::vector<int> out{};
std::generate_n(std::back_inserter(out), base.size() * factor,
[&base, counter=0]() mutable {
return base[counter++ / factor];
});
for(const auto i : out) {
std::cout << i << ' ';
}
}
此代码显示:1 1 1 1 0 0 0 0 2 2 2 2
密钥是std::generate_n
中使用的lambda。它在内部计数器上运行,以基于base
向量(并根据factor
和counter
值进行访问)知道要生成哪些值。
答案 1 :(得分:1)
不,这是一个非常特定的用例,但是您可以自己轻松实现它。
#include <vector>
#include <iostream>
std::vector<int> Elongate(const std::vector<int>& src, const size_t factor)
{
std::vector<int> result;
result.reserve(src.size() * factor);
for (const auto& el : src)
result.insert(result.end(), factor, el);
return result;
}
int main()
{
std::vector<int> temp{2, 0, 1};
std::vector<int> real = Elongate(temp, 4);
for (const auto& el : real)
std::cerr << el << ' ';
std::cerr << '\n';
}