You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C++二维Vector切片的修改同步至原容器?

如何让sub的修改同步到原vector容器?

当前代码中,通过迭代器范围构造的sub是原容器block_values的拷贝,修改sub不会影响原容器。需要让sub作为原容器的视图或引用,实现修改同步。

问题原因

你当前初始化sub的方式:

vector<std::vector<int>> sub = vector<std::vector<int>>(block_values.begin() + 1, block_values.begin()+3);

会创建一个新的vector容器,其中的每个vector<int>都是原容器对应元素的拷贝。因此对sub的修改只会作用于这些拷贝,不会同步到block_values。

解决方案

方案1:使用C++20 std::span(推荐)

std::span是C++20引入的非拥有式视图,直接引用原容器的一段连续范围,不需要拷贝数据,修改span内的元素会直接修改原容器。

修改步骤:

  1. 包含span头文件:#include <span>
  2. 将sub定义为span类型:
std::span<std::vector<int>> sub(block_values.begin() + 1, block_values.begin() + 3);
  1. 调整函数参数以支持span(或保持原引用参数,span可隐式转换为vector的引用):
// 修改print_vec为接受span(兼容const场景)
void print_vec(std::span<const std::vector<int>> v) {
    cout << "**********print start!!!**********" << endl;
    for (const auto& row : v) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }
    cout << "**********print end!!!**********" << endl;
}

// 修改change_vec为接受span
void change_vec(std::span<std::vector<int>> v) {
    for (auto& row : v) {
        for (int& num : row) {
            num *= 10000;
        }
    }
}

修改后运行,对sub的修改会直接同步到block_values,最终输出中block_values的第2、3行(对应原索引1、2)会变为970000 960000和950000 940000。

方案2:使用指针容器(兼容C++20之前版本)

如果无法使用C++20,可以存储原容器元素的指针,通过指针修改原容器的元素。

修改步骤:

  1. 将sub定义为存储vector<int>*的容器:
vector<vector<int>*> sub;
for (auto it = block_values.begin() + 1; it != block_values.begin() + 3; ++it) {
    sub.push_back(&(*it));
}
  1. 调整函数以支持指针容器:
void print_vec(const vector<vector<int>*>& v) {
    cout << "**********print start!!!**********" << endl;
    for (const auto* row : v) {
        for (int num : *row) {
            cout << num << " ";
        }
        cout << endl;
    }
    cout << "**********print end!!!**********" << endl;
}

void change_vec(vector<vector<int>*>& v) {
    for (auto* row : v) {
        for (int& num : *row) {
            num *= 10000;
        }
    }
}

此方案同样能实现修改sub时同步更新block_values的效果。


内容的提问来源于stack exchange,提问作者user11578

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 16:50:27