简体   繁体   中英

Create two vectors contain the same elements in different order

Is it possible to create a vector from elements of another vector so that changing an element by index in one of the vectors results in a change in the corresponding element in the second vector?

std::vector<double> temp_1 = {1, 4};
std::vector<double> temp_2;
temp_2.resize(3);
temp_2[0] = temp_1[1];
temp_2[1] = temp_1[0];
temp_1[0] = 55;
>>> temp_1 =[55,4] 
>>> temp_2 =[4,55] 

I can be done using pointers or reference wrappers, though note that any reallocation of the referenced vector will render the references invalid. However, if no reallocations are involved, it should be fine.

#include <vector>
#include <functional>
#include <iostream>

int main(int, char*[])
{
    std::vector<int> x{1,2,3};
    std::vector<std::reference_wrapper<const int>> y {
        x[2], x[0], x[1]
    };

    std::cout << "y before modifying x\n";
    for (auto el: y) {
        std::cout << el << '\n';
    }

    x[1] = 8;
    std::cout << "y after modifying x\n";
    for (auto el: y) {
        std::cout << el << '\n';
    }

}

https://godbolt.org/z/d41nxPffz

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM