Home > Software engineering >  Inserting elements to vector in c
Inserting elements to vector in c

Time:06-19

I need to insert for every element of vector it's opposite.

#include <iostream>
#include <vector>
int main() {
  std::vector < int > vek {1,2,3};
  std::cout << vek[0] << " " << vek[1] << " " << vek[2] << std::endl;
  for (int i = 0; i < 3; i  ) {
    std::cout << i << " " << vek[i] << std::endl;
    vek.insert(vek.begin()   i   1, -vek[i]);
  }
  std::cout << std::endl;
  for (int i: vek) std::cout << i << " ";
  return 0;
}

OUTPUT:

1 2 3
0 1  // it should be 0 1 (because vek[0]=1)
1 -1 // it should be 1 2 (because vek[1]=2)
2 1  // it should be 2 3 (because vek[2]=3)

1 -1 1 -1 2 3 // it should be 1 -1 2 -2 3 -3

Could you explain me why function insert doesn't insert the correct value of vector? What is happening here?

Note: Auxiliary vectors (and other data types) are not allowed

CodePudding user response:

During the for loop, you are modifying the vector:

After the first iteration which inserts -1, the vector becomes [1, -1, 2, 3]. Therefore, vec[1] becomes -1 rather than 2. The index of 2 becomes 2. And after inserting -2 into the vector, the index of the original value 3 becomes 4.

In the for loop condition, you need to add index i by 2, instead of 1:

#include <iostream>
#include <vector>
int main() {
  std::vector < int > vek {1,2,3};
  std::cout << vek[0] << " " << vek[1] << " " << vek[2] << std::endl;
  for (int i = 0; i < 3 * 2; i =2) {
    std::cout << i << " " << vek[i] << std::endl;
    vek.insert(vek.begin()   i   1, -vek[i]);
  }
  std::cout << std::endl;
  for (int i: vek) std::cout << i << " ";
  return 0;
}
  • Related