从某个位置开始将一个向量复制到另一个向量



假设我有两个向量

auto a = std::vector<int>{10, 11, 12, 13, 14, 15};
auto b = std::vector<int>{21, 22, 23};

,我想把b的全部内容复制到a中,从某个位置开始(假设是4),可能会覆盖元素并调整向量的大小,这样得到的向量a看起来像

[10, 11, 12, 13, 21, 22, 23]

是否有一些功能在STL(可能在<algorithm>或'),正是这样做?

借助c++ 20<ranges>

auto a = std::vector{10, 11, 12, 13, 14, 15};
auto b = std::vector{21, 22, 23};
auto pos = 4;
auto c = a | std::views::drop(pos);
auto sz = c.size();
std::ranges::copy(b | std::views::take(sz), c.begin());
std::ranges::copy(b | std::views::drop(sz), std::back_inserter(a));

演示

你可以这样做:

auto a = std::vector<int>{ 10, 11, 12, 13, 14, 15 };
auto b = std::vector<int>{ 21, 22, 23 };
int from = 4; //from which index
a.insert(a.begin() + from, b.begin(), b.end());
a.resize(from + b.size());
for (auto i : a) {
std::cout << i << " ";
}

没有现成的算法可以做到这一点。你可以像这样自己实现它:

auto a = std::vector<int>{10, 11, 12, 13, 14, 15};
auto b = std::vector<int>{21, 22, 23};
std::size_t insertionPoint = 4;
std::size_t elemCount = std::max(insertionPoint + b.size(), a.size());
a.resize(elemCount);
std::copy(std::cbegin(b), std::cend(b), std::begin(a) + insertionPoint);

注意:

  • 这要求std::vector的值类型(即,在本例中,int)是默认可构造的。
  • 如果insertionPoint大于a.size(),则在a的最后一个元素(插入之前)和b的第一个插入元素之间获得默认构造元素。

相关内容

  • 没有找到相关文章

最新更新