Nay mình mới học đến STL
đang xem đến vector, thấy có nhiều cái tiện nhưng cũng có nhiều cái bất tiện
kiểu như c++ thiên biến vạn hóa -> nó mạnh, nhưng chết cũng vì chính điểm mạnh của nó
nhiều cái cảm thấy nó sinh ra thừa thãi :3 được đầu mất đuôi vậy
sau 1 lúc tìm hiểu thì mình k biết cách nào để thay đổi được 1 phần tử đã push_back vào
vector có thể truy cập đến phần tử bất kì, nhưng lại k cho đưa vào 1 phần tử vào vị trí bất kì đúng k nhỉ
Thay đổi giá trị của 1 phần tử bất kì trong vector C++
có:
v.insert(begin(v)+i, x); //thêm x vào vector v ở vị trí i
nhưng bạn phải tự hỏi tại sao lại cần đưa vào 1 vị trí bất kì mà ko phải đưa vào cuối dãy? Tương tự như khi viết 1 đoạn văn tại sao bạn viết thêm chữ vào phía cuối chứ ko phải thêm chữ ngẫu nhiên? Vì nó tốn kém hơn viết vào cuối dãy, viết vào cuối bạn ko phải di chuyển bất cứ thứ gì cả. Nếu thêm vào giữa thì bạn phải xóa rồi chép lại cả đống chữ phía sau để có khoảng trống cho bạn thêm chữ vô giữa.
với mảng thông thường bạn muốn thêm 1 phần tử vô giữa mảng thì phải làm sao? Mất công viết 1 vòng for di chuyển phần phía sau phải ko?
ý mình là mình có 1 dãy
1 2 3 4 5
vì lý do gì đó mình cần set phần từ 3 về 0
chứ k hẳn là chèn vào, mà là thay đổi ấy
hàm insert kia là chèn vào rồi
xài nó y hệt như xài mảng.
a[2] = 0;
a
là int a[5]
hay là vector<int> a;
gì thì cũng a[i] = x;
hết
lỗi :3 mình thử rồi, hình như nó chỉ cho phép lấy phần tử với thứ tự bất kì, chứ k cho đặt vào phần tử với thứ tự bất kì
đưa code bạn lên đây, hay là bạn truyền a theo const nên ko gán được?
vd
void doSomething(const vector<int>& a)
{
a[2] = 0; //lỗi vì a là hằng
}
mình làm trực tiếp tại chỗ luôn, k truyền vào hàm nào cả mà vẫn lỗi
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector <int> songuyen;
songuyen[0] = 0;
songuyen.at(1) = 1;
for (int i = 0; i < songuyen.size(); i++){
cout << songuyen.at(i) << endl;
}
system("pause");
return 0;
}
buidl k lỗi , mà chạy mới lỗi
là do cái vector bạn chưa có phần tử nào, làm sao lấy a[i] được
vector<int> a; // a = [] //mảng ko chứa phần tử nào, mảng rỗng
a[0]; //lỗi vì a chưa có phần tử nào
phải khai báo a là (ví dụ mảng gồm 5 phần tử)
vector<int> a(5); // a = [0,0,0,0,0] //mảng chưa 5 phần tử
a[0]; //ngon lành
ờ nhể, nhưng mà chưa có phần tử nào, nó k cho gán theo kiểu như mảng à, phải dùng push_back
đúng rồi:
vector<int> a; // a = []
a.push_back(1); // a = [1]
a.push_back(2); // a = [1,2]
a.push_back(3); // a = [1,2,3]
nếu như trước đó mình reserve(n) vào thì có làm được kiểu đó k nhi
resize
mới đúng. reserve
dùng ở lúc khác
vector<int> a; //a = []
a.resize(3); //a = [0,0,0]
a.resize(5, 10); //a = [0,0,0,10,10] resize đồng thời gán giá trị những phần tử mới là 10
a.resize(2, 5); //a = [0,0] (5 ko có tác dụng gì cả vì size mảng mới < size mảng cũ)