0:45 khai báo vecto 2:35 kích thước vecto (size) 4:20 truy cập phần tử 6:13 duyệt vecto (giống mảng) *iterator (giống con trỏ) : 7:10 13:50 vecto có sẵn n phần tử 16:00 vecto có sẵn n phần tử có giá trị
Anh ơi cho em hỏi, với n số cho trước mà em tạo vector muốn đánh số từ 1 tới n thì em khai báo vector a(n + 1) Vậy khi em muốn giải quyết 1 bài toán, mà em chọn cách đánh số i =3; i
Dạ đề bài của em là số đẹp được định nghĩa là số chia hết cho 3 hoặc 5. Vd: 3,5,6,9,10...Hãy in ra số đẹp thứ k. Output nếu k = 2 thì in ra 5. Em tạo 1 vector để lưu các số có thể chia hết cho 3 hoặc 5 sau đó em lưu vào vector đã tạo kia, em tạo vector có n phần tử là vector a(n + 1). Thay vì em duyệt vòng lặp chạy từ 1 thì em duyệt từ 3 để xét các số chia hết cho 3 hoặc 5 luôn. Vậy khi em tạo mảng có n + 1 phần tử và phần tử đầu tiên của em đánh số là 3 thì a[0] của em = 3 hay vẫn = 1 ạ ?
#include #define int long long using namespace std; const int maxn = 1e7; vector < int > c; void solution (int maxn) { for (long long i = 3; i > k; cout
Này là toán tử giải tham chiếu, em hiểu đơn giản it là cái trỏ tới giá trị của 1 phần tử trong vector, muốn truy cập giá trị đó phải giải tham chiếu, nên dùng *
anh xem hộ em hàm main xem em sai ở đâu với ạ : đề bài : viết hàm tìm những xâu có độ dài lớn nhất, em ngồi tìm mãi k ra vector checkDoDai(vector v){ int max = 0; vector ketqua; for (int i = 0 ; i < v.size() ; i++){ if (max < v[i].size()){ max = v[i].size(); } } for (int i=0 ; i < v.size();i++){ if (max == v[i].size()){ ketqua.push_back(v[i]); } } return ketqua; } int main(){ int n; cin >> n; vector b; for (int i =0 ; i < b.size() ;i++){ string x; cin >> x; b.push_back(x); } checkDoDai(b); }
vì it và v.end() không phải là giá trị, mà là iterator (là con trỏ đại diện cho 1 phần tử). Vì thế nên không thể dùng kiểu so sánh như này được bạn nhé.
Bạn xem phần này nhé, mình có nói phần tách từ chỗ đó, như bạn nhập từ bàn phím thôi. Có điều luồng vào cho từ nó ko phải từ bàn phím nữa mà từ luồng stringstream thôi. ua-cam.com/video/AwBY3AkQO3M/v-deo.html&ab_channel=andrew2804
Vector thực chất nó được cấp một bộ nhớ lớn hơn số lượng phần tử nó lưu hiện tại, có thể mở rộng hoặc thu hẹp còn mảng động thì e vẫn phải chỉ định trước số lượng phần tử cần xin cấp phát động mà
set,map,vector không thể truyền vào hàm được phải không anh? em có thử và thấy không được, nếu mà không được thật thì mình muốn thao tác với các kiểu dữ liệu như set, map ,vector qua hàm cho tiện thì phải làm sao ạ?
dạ cho em hỏi tại sao trong vector khi xóa thì thường phải xóa vector.end() ạ nếu ko xóa vector.end() thì dư cái phần tử sau vị trí cuối cùng liệu chương trình có sai ko ạ
sao lại xóa vector.end() nhỉ, a chưa xóa vector.end() bao h. vì nó ko phải là iterator trỏ tới phần tử nào trong vector. Thường xóa phần tử ở cuối vector họ dùng pop_back hoặc erase(v.size() - 1).
Anh Andrew ơi em muốn hỏi là khi khai báo kiểu a[n] thì n phải là 1 hằng số hay phải nằm trong #define thì mới làm được chứ ạ. Em vẫn chưa hiểu sao khi mà nó chưa phải là 1 hằng số hay #define thì vẫn ko bị lỗi gì, kiểu int n = 10; int a[n]; thì vẫn được.
int main(){ vector v; int n; cin >> n; while(n){ v.push_back(n%10); n/=10; } // insert all digit of N into vector // for(int i=0; i < v.size(); i++){ // cout
for(auto x : adj[a]) { adj[x].erase(remove(adj[x].begin(),adj[x].end(),a) , adj[x].end()); } adj[a].clear(); Dạ khi xóa danh sách kề của 1 đỉnh ạ nếu bỏ adj[x].end() thì chương trình vẫn chạy đúng nhưng nộp sai ạ
Thông tin các khóa học mình đang hướng dẫn : 28tech.com.vn/
0:45 khai báo vecto
2:35 kích thước vecto (size)
4:20 truy cập phần tử
6:13 duyệt vecto (giống mảng)
*iterator (giống con trỏ) : 7:10
13:50 vecto có sẵn n phần tử
16:00 vecto có sẵn n phần tử có giá trị
hay bạn oi
respect
Dân IT cần những người như này
Thank bạn :D.
các video của anh vừa chất lượng, logic và dễ hiểu
Cảm ơn em :D
Andrew dạy nhiều thuật toán hay quá. Cảm ơn bạn
đây là kênh của andrew hả, kênh này đổi tên hèn j mình tìm ko ra :)
@@quythayhat ai shi ba
Anh ơi cho em hỏi, với n số cho trước mà em tạo vector muốn đánh số từ 1 tới n thì em khai báo vector a(n + 1)
Vậy khi em muốn giải quyết 1 bài toán, mà em chọn cách đánh số i =3; i
rác nhé em. Câu hỏi của em a cũng ko thấy nó rõ ràng và mạch lạc nữa.
Dạ đề bài của em là số đẹp được định nghĩa là số chia hết cho 3 hoặc 5. Vd: 3,5,6,9,10...Hãy in ra số đẹp thứ k. Output nếu k = 2 thì in ra 5. Em tạo 1 vector để lưu các số có thể chia hết cho 3 hoặc 5 sau đó em lưu vào vector đã tạo kia, em tạo vector có n phần tử là vector a(n + 1). Thay vì em duyệt vòng lặp chạy từ 1 thì em duyệt từ 3 để xét các số chia hết cho 3 hoặc 5 luôn. Vậy khi em tạo mảng có n + 1 phần tử và phần tử đầu tiên của em đánh số là 3 thì a[0] của em = 3 hay vẫn = 1 ạ ?
#include
#define int long long
using namespace std;
const int maxn = 1e7;
vector < int > c;
void solution (int maxn)
{
for (long long i = 3; i > k;
cout
bài này nên trước bài #9 ạ tại #9 a có đề cập đến mảng vector mà e chưa học j về vector, xem bài này xong mới hiểu đc phần mảng vector bài #9
May quá tưởng mk học bỏ sót chỗ nào 😂
cho em hỏi lúc 10p20 đó, khi cout
Này là toán tử giải tham chiếu, em hiểu đơn giản it là cái trỏ tới giá trị của 1 phần tử trong vector, muốn truy cập giá trị đó phải giải tham chiếu, nên dùng *
cảm ơn anh rất nhiều. Anh rất dễ hiểu
ok em nhé :v
anh ơi trong clion e không dùng được thư viện bits/stdc++ thì vecto dùng thư viện nào v ạ
anh xem hộ em hàm main xem em sai ở đâu với ạ : đề bài : viết hàm tìm những xâu có độ dài lớn nhất, em ngồi tìm mãi k ra
vector checkDoDai(vector v){
int max = 0;
vector ketqua;
for (int i = 0 ; i < v.size() ; i++){
if (max < v[i].size()){
max = v[i].size();
}
}
for (int i=0 ; i < v.size();i++){
if (max == v[i].size()){
ketqua.push_back(v[i]);
}
}
return ketqua;
}
int main(){
int n; cin >> n;
vector b;
for (int i =0 ; i < b.size() ;i++){
string x; cin >> x;
b.push_back(x);
}
checkDoDai(b);
}
A thấy ok r đấy, in ra cái vector trả về trong hàm checkdodai là đc. E chưa in ra
@@28tech_ : em in nhu the nay dung k a
for (int i =0 ; i < checkDoDai(b).size() ; i++){
cout
@@anoriu2396 ko được, e phải dùng 1 cái vector mà lưu cái checkDoDai nó trả về em ạ. vector res = checkDoDai(b); xong duyệt res mà in ra.
Nâng cấp Mic Đi ad
hay quá anh ra thêm nhiều clip giải bài tập bằng vector hoặc trong container đi anh.
các bài tập sau này có lúc mình giải bằng vector hoặc mảng, nói chung giải bằng thằng nào cũng được. Còn set, map có hết rồi nhé.
@@28tech_ ok a kênh chất lượng để học thuật toán ^^
Làm sao để xoá 1 phần tử trong vector vậy a?
Tuyệt quá
em cảm ơn anh
cái này hay ghê luôn
Bạn có dạy làm game bằng C++ không hả bạn
quá hay luôn a ạ
a ơi đoạn 15:00 tại sao bắt buộc phải khai báo 1 biến tạm v ạ?
an ơi cho em hỏi là nếu chúng ta biết giá trị trong vector thì giờ muốn biết vị trí của nó nằm ở đâu thì làm sao ạ
Duyệt rồi so sánh thôi em, như tìm kiếm tuyến tính ấy
hay quá ạ
Thank you e :D
Thay thế cho linked list dc k ạ
Được nhé em
25 25 C:\Users\Administrator\Desktop\Trau.cpp [Error] invalid use of member (did you forget the '&' ?)
Anh ơi cho em hỏi là lỗi này sửa như nào với ạ
Lỗi này là thiếu dấu &
:))
thay vì vector thì có vector đc kh ạ
Được thoải mái em ạ
có thể tạo mảng 2 chieu bằng vector ko anh
hôm nay lại tiếp tục
Cho em hỏi em đang học thương mại điện tử nhưng h em muốn theo mảng mobile bên lập trình h em nên tự học những j để có thể đi làm v anh❤❤
em tìm video những môn học quan trọng của ngành IT a làm ấy.
cho mình hỏi là ">>" ở đoạn 19:32 có nghĩa là gì ạ
anh ơi cho em hỏi với, thay vì "for (int i=1; i
Không nhanh hơn đây em. Nó như nhau thoii
làm sao để sort trong vector vậy anh
vẫn dùng sort thường ạ
cho e hỏi lấy các hàm có sẵn thì ấn nút tắt gì nhỉ
ví dụ gọi nhanh hàm push_back() ấy
Tự viết ra thôi em.
@@28tech_ à vâng
Chắc anh gõ nhah quá e tưởng a gọi hàm bằng phím tắt
a ơi tại sao ko dùng it < v.end() mà phải dùng it != v.end() v anh trong vòng for ấy ah
tại vì v.end() không phải phần tử cuối :P
vì it và v.end() không phải là giá trị, mà là iterator (là con trỏ đại diện cho 1 phần tử). Vì thế nên không thể dùng kiểu so sánh như này được bạn nhé.
Càng học càng cuốn 😋
haha :v
Anh có thể gỉai thích chỗ này một chút được không ạ: while (ss>>tmp). ss>>tmp là làm gì anh nhỉ
Bạn xem phần này nhé, mình có nói phần tách từ chỗ đó, như bạn nhập từ bàn phím thôi. Có điều luồng vào cho từ nó ko phải từ bàn phím nữa mà từ luồng stringstream thôi.
ua-cam.com/video/AwBY3AkQO3M/v-deo.html&ab_channel=andrew2804
13:16 sao em không giải được tham chiếu kiểu này với set ạ
set em dùng iterator vẫn giải tham chiếu bt mà.
anh ơi vector thì khác gì so với con trỏ quản lý 1 mạng động ạ
Vector thực chất nó được cấp một bộ nhớ lớn hơn số lượng phần tử nó lưu hiện tại, có thể mở rộng hoặc thu hẹp còn mảng động thì e vẫn phải chỉ định trước số lượng phần tử cần xin cấp phát động mà
@@28tech_ vâng ạ, cảm ơn anh nha
set,map,vector không thể truyền vào hàm được phải không anh? em có thử và thấy không được, nếu mà không được thật thì mình muốn thao tác với các kiểu dữ liệu như set, map ,vector qua hàm cho tiện thì phải làm sao ạ?
Truyền thoải mái mà e. Return về cũng được nữa
Interator nó có giống while ko a
Ko liên quan em ạ
chưa có video về sắp xếp và tìm kiếm trong vector à bạn?
Mình hướng dẫn trong phần thuật toán sắp xếp rồi.
anh ơi học gì để làm web được vậy ạ
Cần học nhiều thứ lắm em, em xem video các môn học nền tảng của a ấy
bạn có video nào về QHĐ không?
Làm thì làm hết luôn phần thuật toán b ạ nhưng mà chưa có thời gian làm ấy.
anh có bài nào nói về cái stringstream không ạ, em chưa thấy nó bao giờ.
Có trong phần xâu kí tự, string trong C++ ấy e.
anh ơi cho em hỏi cái Vector lưu được số lớn nhất là bao nhiêu chữ số và vector lưu được khoảng 10^15 phần tử không ạ
Nó có cái max_size đó em nhưng thường thì vector lưu cũng như mảng 1 chiều thôi e nhé
a cho e hỏi treeb devc++ thiết lập thế nào để sử dụng đc dấu : trong duyệt bằng for each, e gõ giống hệt a, mà nó báo lỗi đoạn : đó a
mik cx v
9:37 sao em thay đổi điều kiện lặp thành rbegin lại không chạy được ạ
làm sao để chú thích nhiều dòng 1 lúc vậy thầy ( là cái này á // )
em bôi đen hết nội dung rồi ctrl + /
Anh cho em hỏi vì sao em chạy 3 cái lệnh sau không được anh . Dạ em cảm ơn
Em chạy vs chuẩn C++ 11 nhé
a ơi e ko biết gì về C nhưng học lý thuyết đồ thị trên kênh a đc k ạ
Học được nhưng lúc cài đặt thuật toán thì ko cài đặt đc em ạ
Anh ơi, em cũng dùng dev c++ 5.11 mà sao k dùng dc từ khóa auto và vòng lập for each vậy. Mong anh trả lời.
Em phải cài C++ 11 trở lên. E vào tool -compiler option-setting-code gênration-language standard-gnuc++11
@@28tech_ Em cảm ơn, em dùng dc for each rồi. Mà cộng nhận cách giải thích của anh dễ hiệu thật, anh cố gắng ra nhiều video nhé.
sao dev c của e không chạy đc mấy lệch như vậy nhỉ. mặc dù em nhập giống hệt mà
em phải chạy với chuẩn C++ 11. Vào tool=>compiler option=>setting=>code generation=>language standard=>gnuC++11
@@28tech_ dạ đc rồi ạ. Em cảm ơn ạ
Cs mấy hàm e dùng nó bảo k chạy ở phiên bản đó nma e cx dùng 5.11 mag
khúc 16:55 ảnh nói nới rộng ra là sao vậy mọi người mình thấy ảnh chạy xong vẫn bình thường mà
anh có tài liệu không ạ
B có thể xem ở đây. drive.google.com/drive/folders/1RGX-OVgMFLYwqIPe0lyMzcH2mNmD0upu?usp=sharing
19:30 dấu >> nghĩa là gì ạ
khóa C++ ở đây full lý thuyết chưa anh !
Thiếu file em.
a có video nào nói rõ về cái for (int x:v) k a =v để e xem lại chứ e k hiểu cái này lắm
em xem phần mảng 1 chiều, a có hướng dẫn duyệt mảng bằng for each.
ua-cam.com/video/M3v7Ie9hu0s/v-deo.html&ab_channel=andrew2804
17:11 sao mình truyền 20 mà giá trị cuối lại ra = 0 vậy anh
Da cout dau
thay ++it thành it++ cũng ko khác j đâu anh nhỉ
khác nhau cả
15:00
có cách nào để biết 1 phần tử đã xuất hiện trong vector chưa vậy mn
Tìm kiếm tuyến tính thôi bạn
anh ơi còn muốn nhập mà không biết trước số lượng phần tử thì làm như nào ạ. Kiểu vừa nhập rồi vừa đưa mấy phần tử vào vector luôn í
Đưa 1 thôi chứ sao lại đưa mấy
xem kĩ lại đi ảnh có chỉ rồi á bạn. tạo biến x rồi cin>>x xong push_back(x)vào
làm sao để comment full đoạn code vậy anh =)))
bôi đen hết rồi ctrl + / là đc nhé
dạ cho em hỏi tại sao trong vector khi xóa thì thường phải xóa vector.end() ạ nếu ko xóa vector.end() thì dư cái phần tử sau vị trí cuối cùng liệu chương trình có sai ko ạ
sao lại xóa vector.end() nhỉ, a chưa xóa vector.end() bao h. vì nó ko phải là iterator trỏ tới phần tử nào trong vector. Thường xóa phần tử ở cuối vector họ dùng pop_back hoặc erase(v.size() - 1).
8:31
Anh Andrew ơi em muốn hỏi là khi khai báo kiểu a[n] thì n phải là 1 hằng số hay phải nằm trong #define thì mới làm được chứ ạ. Em vẫn chưa hiểu sao khi mà nó chưa phải là 1 hằng số hay #define thì vẫn ko bị lỗi gì,
kiểu
int n = 10;
int a[n];
thì vẫn được.
Được mà em, ko vấn đề gì, có bên vscode thì nó cần chặt chẽ hơn nên ko cho khởi tạo cỡ của mảng là 1 biến không phải hằng.
sao e nhập cách duyệt interator vs auto mà máy em cứ báo lỗi a nhỉ
Chắc chưa cài chuẩn C++ 11. Trong Dev c e vào Tool-> compiler option -> setting -> code generation -> language standard rồi chọn GNU++11.
int main(){
vector v;
int n;
cin >> n;
while(n){
v.push_back(n%10);
n/=10;
}
// insert all digit of N into vector
// for(int i=0; i < v.size(); i++){
// cout
16:03
Sao sao 😁😁😁
@@28tech_ Dạ em lưu phần cần xem ạ,anh dạy rất hay cảm ơn anh.Năm ngoái em được nhì tỉnh rồi năm nay mong được nhất để thi quốc gia.Keep it up nha anh
@@danhphanehe1655 ok e :D
8
mọi người cho mình hỏi 7:06 x : v là gì v ạ
Nó là range base for loop. Bạn tìm hiểu nhé.
@@28tech_ vâng ạ
hoàng tài đúng ko b?
Không hiểu câu hỏi của b.
@@28tech_ à.tên b có phải là hoàng tài ko ấy.:D
@@tranduy1208 Không b ơi.
Khó anh nhỉ
Cái này ko khó đâu em, nó chưa bắt mình suy nghĩ gì nhiều chỉ là áp dụng kiến thức được cung cấp
anh nói to lêm tí đi anh
for(auto x : adj[a])
{
adj[x].erase(remove(adj[x].begin(),adj[x].end(),a) , adj[x].end());
}
adj[a].clear(); Dạ khi xóa danh sách kề của 1 đỉnh ạ nếu bỏ adj[x].end() thì chương trình vẫn chạy đúng nhưng nộp sai ạ
Xóa danh sách kề của 1 đỉnh thì e chỉ cần adj(i).clear là được mà. Làm gì phức tạp thế. Chắc check đỉnh trụ ah 😆😆😆😆
@@28tech_ Dạ cái em đang xét là đơn đồ thị vô hướng ấy anh
@@manhcuong2926 uh nhưng mà e làm phức tạp quá, với a ko rõ bài là gì nên khó giải thích.
@@28tech_ dạ
hay quá ạ