Replace an element into a specific position of a vector

后端 未结 3 1601
臣服心动
臣服心动 2020-12-07 13:00

I want to replace an element into a specific position of a vector, can I just use an assignment:

// vec1 and 2 have the same length & filled in somehow
v         


        
相关标签:
3条回答
  • 2020-12-07 13:29

    See an example here: http://www.cplusplus.com/reference/stl/vector/insert/ eg.:

    
    
    ...
    vector::iterator iterator1;
    
      iterator1= vec1.begin();
      vec1.insert ( iterator1+i , vec2[i] );
    
    // This means that at position "i" from the beginning it will insert the value from vec2 from position i
    
    

    Your first approach was replacing the values from vec1[i] with the values from vec2[i]

    0 讨论(0)
  • 2020-12-07 13:44
    vec1[i] = vec2[i]
    

    will set the value of vec1[i] to the value of vec2[i]. Nothing is inserted. Your second approach is almost correct. Instead of +i+1 you need just +i

    v1.insert(v1.begin()+i, v2[i])
    
    0 讨论(0)
  • 2020-12-07 13:44

    You can do that using at. You can try out the following simple example:

    const size_t N = 20;
    std::vector<int> vec(N);
    try {
        vec.at(N - 1) = 7;
    } catch (std::out_of_range ex) {
        std::cout << ex.what() << std::endl;
    }
    assert(vec.at(N - 1) == 7);
    

    Notice that method at returns an allocator_type::reference, which is that case is a int&. Using at is equivalent to assigning values like vec[i]=....


    There is a difference between at and insert as it can be understood with the following example:

    const size_t N = 8;
    std::vector<int> vec(N);
    for (size_t i = 0; i<5; i++){
        vec[i] = i + 1;
    }
    
    vec.insert(vec.begin()+2, 10);
    

    If we now print out vec we will get:

    1 2 10 3 4 5 0 0 0
    

    If, instead, we did vec.at(2) = 10, or vec[2]=10, we would get

    1 2 10 4 5 0 0 0
    
    0 讨论(0)
提交回复
热议问题