2011-07-17 63 views
37

Tôi muốn chèn một phần tử vào một vị trí cụ thể của một véc tơ, tôi có thể chỉ cần sử dụng một bài tập:chèn một phần tử vào một vị trí cụ thể của một vector

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

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1 

hoặc tôi phải sử dụng chèn():

vector<sometype>::iterator iterator = vec1.begin(); 

vec1.insert(iterator+(i+1), vec2[i]); 
+12

Hãy cẩn thận với cách nói của bạn tại đây. 'Chèn' sẽ có nghĩa là thêm một phần tử tại một vị trí và di chuyển tất cả các phần tử tiếp theo lên một vị trí trong vec-tơ (ví dụ: phát triển vectơ bởi một phần tử). Mặt khác, bạn có thể sử dụng 'setting' để cho biết bạn muốn thay đổi phần tử vectơ hiện có thành một giá trị mới. –

+0

tôi nghĩ rằng những gì tôi muốn là thay thế bất cứ điều gì tại vec1 [i] với vec2 [i]; và trong trường hợp của tôi vec [i] có thể là null, và tôi muốn giữ độ dài của vec1 và 2 giống nhau; – daiyue

Trả lời

70
vec1[i] = vec2[i] 

sẽ thiết lập giá trị của vec1[i] với giá trị của vec2[i]. Không có gì được chèn vào. Cách tiếp cận thứ hai của bạn gần như chính xác. Thay vì +i+1 bạn chỉ cần +i

v1.insert(v1.begin()+i, v2[i]) 
+1

Độ phức tạp thời gian O (n) phải không? – ArmaGeddON

+1

@ArmaGeddON: Để chèn, vâng –

0

Xem ví dụ ở đây: 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 

tiếp cận đầu tiên của bạn đã thay thế các giá trị từ vec1 [i] với các giá trị từ vec2 [i ]

10

Bạn có thể làm điều đó bằng cách sử dụng at. Bạn có thể thử các ví dụ đơn giản sau:

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); 

Chú ý rằng phương pháp at trả về một allocator_type::reference, đó là trường hợp đó là một int&. Sử dụng at tương đương với việc gán các giá trị như vec[i]=....


Có sự khác biệt giữa atinsert vì nó có thể được hiểu với ví dụ sau:

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); 

Nếu bây giờ chúng ta in ra vec chúng tôi sẽ nhận được:

1 2 10 3 4 5 0 0 0 

Nếu thay vào đó, chúng tôi đã làm vec.at(2) = 10 hoặc vec[2]=10, chúng tôi sẽ nhận được

1 2 10 4 5 0 0 0 
Các vấn đề liên quan