c++ - 底层 STL:在没有新 vector 的情况下将 std::vector 连接到自身

标签 c++ stl vector

<分区>

我有一个存储矩阵对角线的 STL vector 。我正在实现的某个数学规则告诉我,我可以简单地通过获取原始 vector 并将该 vector 的拷贝连接到自身(它的大小加倍,并且值在 1/之后重复)来生成张量积的对角线的新矩阵2 * 尺寸())。

我写了下面的代码:

std::vector<int> aVec;

for (int k = 0; k < aVec.size(); k++) aVec.insert(aVec.end(), aVec[k]);

但是当我尝试这个时我遇到了段错误。如果我创建 aVec 的拷贝并将其用作插入“值”,以及将其用于循环参数中的 size(),它会起作用,但我必须执行这些两者事情(否则我仍然会遇到段错误)。

任何人都可以解释导致此实现不起作用的底层原因吗?

最佳答案

使用基于迭代器的操作:

vec.reserve(vec.size() * 2);
vec.insert(vec.end(), vec.begin(), vec.end());

关于c++ - 底层 STL:在没有新 vector 的情况下将 std::vector 连接到自身,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11511115/

相关文章:

c++ - 共享变量的竞争条件

c++ - 创建字符串常量集集合 C++

c++ - 不带参数调用 std::vector::reserve 是什么意思,为什么在创建空 vector 后这样做?

c++ - 将 vector 更改为数组会使我的程序变慢

c++ - vector::insert 是否只允许保留一次并避免进一步的容量检查?

c++ - 复合文字是标准 C++ 吗?

c++ - 使用元编程计算log2但是 `compilation terminated`

c++ - 如何在 SQLite 中传递用于触发函数的变量?

C++ 基于链表的树结构。理智地在列表之间复制节点

c++ - STL什么是随机访问和顺序访问?