Kevin Agusto
Kevin Agusto

Reputation: 66

The element of vector not updating

//simply print each elements in a vector
template<class Iterp>
void print_iter(Iterp begin, Iterp end, std::string delim=", ", std::string ending="\n"){
    int len = (end-begin);
    for (size_t i = 0; i < len-1; i++)
    {
        std::cout << (*(begin+i)) << delim;
    }
    if (len>1){
        std::cout << (*(end-1));
    }
    std::cout << ending;
}    

template<class A, class B>
void pr(A first, A end, std::vector<std::vector<B>> &the_result){
    int len = end-first;
    for (size_t a = 0; a < len; a++)
    {
        for (size_t b = 0; b < len; b++)
        {
            for (size_t c = 0; c < len; c++)
            {
                //theres a bunch ways i tried to save these in "the_result" variable, and I ended up with this.
                std::vector<B> result(first, end);
                result.at(a) = (*(first+a));
                result.at(b) = (*(first+b));
                result.at(c) = (*(first+c));
                
                print_iter(result.begin(), result.end());
                //the problem is the "result" variable is not updating using .at() function. So the "result" variable content is still 1, 2, 3.
                

                the_result.push_back(result); //this is not the problem since the "result" variable is still 1, 2, 3

                // std::cout << (*(first+a)) << " " << (*(first+b)) << " " << (*(first+c))
                // But, this one shows it's producing the right permutations.
            }
            
        }
                
    }
    
}
    int main(){
        std::vector<int> test{1, 2, 3}; //tried to create the permutations of this
        int n = 27; //3^3 = 27

        std::vector<std::vector<int>> result(n, std::vector<int>(test.begin(), test.end()));
/*hoping to save all the permutations in "result" variable, each as a vector. ex:
    123
    113
    111
    ...

*/
        pr(test.begin(), test.end(), result);
    }

So I tried to create a function to produce permutation with repeated elements and hoping to save each permutation in a 2-dimensional vector. However, I even cannot update the "result" variable vector using .at() function, pointer element. but when I print it manually, it's showing it's the right answer.

I also explored some other StackOverflow with similar problems, no answer works for me. vector element not updating

Why is my elements in my vector of objects not updating upon calling one of the objects member function?

Dereference vector pointer to access element //tried to use pointer but still doesn't work

Where I made the mistake?

Upvotes: 0

Views: 418

Answers (1)

463035818_is_not_an_ai
463035818_is_not_an_ai

Reputation: 122458

Your logic is flawed:

   result.at(a) = (*(first+a));
   result.at(b) = (*(first+b));
   result.at(c) = (*(first+c));

No matter what are the values of a,b and c, you assign the same numbers to the same elements in each iteraton. They are the same elements you used to initialize result.

For 3 elements you rather need something along the line of:

   result[1] = (*(first+a));
   result[2] = (*(first+b));
   result[3] = (*(first+c));

Upvotes: 2

Related Questions