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

如何在Eigen数组或矩阵中实现类似std::vector push_back的追加操作?

用Eigen库实现std::vector push_back的等价功能

Eigen库本身没有提供和std::vector::push_back完全一致的成员函数,但可以通过动态调整向量尺寸并保留已有数据的方式实现等价效果,核心是使用conservativeResize方法。

下面是对应你给出的std::vector代码的Eigen实现:

#include <Eigen/Dense>
#include <iostream>
#include <cstdlib>

int main() {
    // Eigen动态整数向量,对应std::vector<int>
    Eigen::VectorXi index;
    // 初始化为空向量
    index.resize(0);

    int random = 1 + (rand() % 5);

    // 逐个追加元素,等价于push_back
    for (int i = 0; i < random; ++i) {
        // 保守调整尺寸:保留现有元素,将向量长度+1
        index.conservativeResize(index.size() + 1);
        // 给新扩展的位置赋值
        index(index.size() - 1) = i + i;
    }

    // 遍历输出所有元素
    for (int i = 0; i < index.size(); ++i) {
        std::cout << "ind = " << index(i) << std::endl;
    }

    return 0;
}

关键说明:

  • Eigen::VectorXi是Eigen专为动态大小整数向量设计的类型,功能上对应std::vector<int>;如果需要其他数值类型,可以用VectorXd(双精度)、VectorXf(单精度)等。
  • conservativeResize是实现"追加"的核心:它会保留向量中已有的所有元素,仅扩展(或缩小)向量的尺寸,这和push_back的行为完全匹配。如果用普通的resize,原有数据可能会被覆盖。
  • Eigen中访问向量元素推荐用index(i)的形式,不过也支持index[i]的数组式访问。

如果提前知道最终元素数量,也可以直接一次性调整向量尺寸再赋值,效率会更高:

// 提前分配足够空间,避免多次调整尺寸
index.resize(random);
for (int i = 0; i < random; ++i) {
    index(i) = i + i;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 16:47:18