01/10/2018, 00:28

Thay đổi giá trị của 1 phần tử bất kì trong vector C++

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ỉ

viết 02:33 ngày 01/10/2018

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?

HelloWorld viết 02:38 ngày 01/10/2018

ý 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

viết 02:31 ngày 01/10/2018

xài nó y hệt như xài mảng.
a[2] = 0;
aint a[5] hay là vector<int> a; gì thì cũng a[i] = x; hết

HelloWorld viết 02:34 ngày 01/10/2018

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ì

viết 02:34 ngày 01/10/2018

đư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
}
HelloWorld viết 02:34 ngày 01/10/2018

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;
}
HelloWorld viết 02:30 ngày 01/10/2018

buidl k lỗi , mà chạy mới lỗi

HelloWorld viết 02:34 ngày 01/10/2018

viết 02:35 ngày 01/10/2018

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
HelloWorld viết 02:30 ngày 01/10/2018

ờ 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

viết 02:42 ngày 01/10/2018

đú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]
HelloWorld viết 02:44 ngày 01/10/2018

nếu như trước đó mình reserve(n) vào thì có làm được kiểu đó k nhi

viết 02:31 ngày 01/10/2018

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ũ)
HelloWorld viết 02:38 ngày 01/10/2018
chào các bạn ! mình vừa làm xong 1 chương trình nhỏ sau, đồng hồ trên console , nhưng có 1 vấn đề là kim giây chạy có khi nhanh hơn hoặc chậm hơn so với thời gian của đồng hồ thật, lúc đầu mới chạy minh lấy thời gian của hệ thống, lý do là mình sử dụng biến mili giay cho chạy lặp với do while ,mili giay tăng thì giây tăng thì giờ tăng thì ngày tăng thì tháng tăng thì năm tăng, và cái đồng hộ này mình dự kiến là đến 2080 thì hết pin vì sử dụng vòng lặp nên có khi máy ch…

qua top nay giup minh ti nha :3
nhu tieu de, chua giai quyet duoc

viết 02:30 ngày 01/10/2018

mình chạy thấy kim giây tăng bình thường mà? Màn hình chớp quá thôi…

HelloWorld viết 02:31 ngày 01/10/2018

chạy xong, để đó tầm 1p sẽ thấy sai giờ, nhanh hoặc chậm, hoặc có thể lấy đồng hồ thật ra so,
vì kim ms chạy bằng vòng lặp, nên do độ trễ của hàm in clock với kiểm tra đk if, lặp, nên đồng hồ chạy k ổn định, khi nhanh khi chậm, do ảnh hướng bới máy tính, nghĩa là thời gian đúng hay k lại bị phụ thuộc bời khả năng xử lý của mt

HelloWorld viết 02:39 ngày 01/10/2018

mình muốn tách ra, thời gian k bị phụ thuộc bởi tốc độ xử lý của mt, nhưng lại k muốn cứ get time hệ thông rồi in ra liên tục, chỉ muốn lấy 1 lần rồi nó tự chạy và có thể đúng giờ như tg của hệ thống

HelloWorld viết 02:34 ngày 01/10/2018

qua top kia đi

Bài liên quan
0