代码之家  ›  专栏  ›  技术社区  ›  Rocket Procd

在c中向向量插入元素++

  •  0
  • Rocket Procd  · 技术社区  · 2 年前

    我需要为向量的每个元素插入相反的元素。

    #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;
    }
    

    输出:

    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
    

    你能解释一下为什么 insert 不插入向量的正确值?这里发生了什么?

    注:不允许使用辅助向量(和其他数据类型)

    1 回复  |  直到 2 年前
        1
  •  2
  •   Haoliang    2 年前

    在for循环期间,您将修改向量:

    在第一次迭代之后,插入 -1 ,矢量变为 [1, -1, 2, 3] . 因此 vec[1] 成为 -1 而不是 2 . 的索引 2. 成为 2. . 插入后 -2 输入向量,原始值的索引 3 成为 4 .

    在for循环条件下,需要添加索引 i 由2代替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;
    }