#include <iostream>
#include <vector>
int main() {
auto m = 2; // #rows
auto n = 3; // #cols
// row-major vector
auto x = std::vector<double>{1,2,3,4,5,6};
auto const colIndex = 1;
auto const col = std::vector<double>{7,8};
// insert column {7,8} into the 2nd position
// =>{1,7,2,3,4,8,5,6}
{
x.resize(x.size() + col.size());
// we'll start shifting elements over from the right
double *from = &x[m * n];
const double *src = &col[m];
double *to = from + m;
size_t R = n - colIndex; // number of cols left of the insert
size_t L = colIndex; // number of cols right of the insert
while (to != &x[0]) {
for (size_t i = 0; i < R; ++i) *(--to) = *(--from);
*(--to) = *(--src); // insert value from new column
for (size_t i = 0; i < L; ++i) *(--to) = *(--from);
}
};
for(auto const& xi : x)
std::wcout << xi << L" ";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKaW50IG1haW4oKSB7CglhdXRvIG0gPSAyOyAvLyAjcm93cwoJYXV0byBuID0gMzsgLy8gI2NvbHMKCS8vIHJvdy1tYWpvciB2ZWN0b3IKCWF1dG8geCA9IHN0ZDo6dmVjdG9yPGRvdWJsZT57MSwyLDMsNCw1LDZ9OwoJCglhdXRvIGNvbnN0IGNvbEluZGV4ID0gMTsKCWF1dG8gY29uc3QgY29sID0gc3RkOjp2ZWN0b3I8ZG91YmxlPns3LDh9OwoJLy8gaW5zZXJ0IGNvbHVtbiB7Nyw4fSBpbnRvIHRoZSAybmQgcG9zaXRpb24KCS8vID0+ezEsNywyLDMsNCw4LDUsNn0KCQogICAgewogICAgICAgIHgucmVzaXplKHguc2l6ZSgpICsgY29sLnNpemUoKSk7CgogICAgICAgIC8vIHdlJ2xsIHN0YXJ0IHNoaWZ0aW5nIGVsZW1lbnRzIG92ZXIgZnJvbSB0aGUgcmlnaHQKICAgICAgICBkb3VibGUgKmZyb20gPSAmeFttICogbl07CiAgICAgICAgY29uc3QgZG91YmxlICpzcmMgPSAmY29sW21dOwogICAgICAgIGRvdWJsZSAqdG8gPSBmcm9tICsgbTsKCiAgICAgICAgc2l6ZV90IFIgPSBuIC0gY29sSW5kZXg7IC8vIG51bWJlciBvZiBjb2xzIGxlZnQgb2YgdGhlIGluc2VydAogICAgICAgIHNpemVfdCBMID0gY29sSW5kZXg7ICAgICAvLyBudW1iZXIgb2YgY29scyByaWdodCBvZiB0aGUgaW5zZXJ0CgogICAgICAgIHdoaWxlICh0byAhPSAmeFswXSkgewogICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFI7ICsraSkgKigtLXRvKSA9ICooLS1mcm9tKTsKICAgICAgICAgICAgKigtLXRvKSA9ICooLS1zcmMpOyAvLyBpbnNlcnQgdmFsdWUgZnJvbSBuZXcgY29sdW1uCiAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTDsgKytpKSAqKC0tdG8pID0gKigtLWZyb20pOwogICAgICAgIH0KICAgIH07CgkKCWZvcihhdXRvIGNvbnN0JiB4aSA6IHgpCgkJc3RkOjp3Y291dCA8PCB4aSA8PCBMIiAiOwoJCglyZXR1cm4gMDsKfQ==