Cần giải thích về vòng for lạ và tham chiếu hàm
Em thấy rất nhiều bài về string họ có viết 1 vòng for dạng như sau:
bool test(std::string inputString) {
vector<int> cnt(26,0);
for(char c:inputString) cnt[c-'a']++;
....................
}
Cái vòng for trên nó hoạt động sao vậy mong mọi người chỉ giúp.
Tiện thể cho em hỏi hàm trả về tham chiếu có phải là tham chiếu đến đối tượng trả về đúng không?
Em nghĩ nó nhằm thay đổi đối tượng trả về nhưng em đọc tài liệu trên mạng thì thấy ghi là trả về tham chiếu nhằm thay đổi đối tượng khác là sao vậy.
Chính xác trên mạng họ nói thế này:"Trả về giá trị thì làm sao nó tiếp tục thay đổi được cái khác ? Trả về tham trị chỉ là 1 giá trị thôi.
- Trả về tham chiếu hay con trỏ đều như nhau -> để làm gì -> để từ đối tượng gọi hàm đó nó còn có thể thay đổi của những thằng khác nữa"
Ví dụ em có lớp phân số:
using namespace std;
class PS {
private:
int ts,ms;
public:
friend istream& operator>>(istream &is,PS &u);
PS operator+(PS u);
istream& operator>>(istream &is,PS &u) {
is>>u.ts>>u.ms;
return is;
}
PS PS::operator+(PS u) {
PS temp;
temp.ts=ts*u.ms+u.ts*ms;
temp.ms=ms*u.ms;
return temp;
}
Tại sao operator+ không trả về tham chiếu mà vẫn tính được: ps1+ps2+ps3;
còn operator>> phải trả về tham chiếu mới nhập được nhiều phân số liên tiếp:
cin>>ps1>>ps2;
Em đọc hết mấy topic hàm trả về tham chiếu rồi mà vẫn không hiểu cho lắm.
Đậu mè, đó là cú pháp của C++11 đó.
Vòng for đó tương đương với
Câu này gây bối rối quá Cho ví dụ cụ thể bạn ơi :v
Bạn hình dung nó như foreach char c in inputString (đọc to) vấn đề là code này không ổn
Bạn trả về tham chiếu của đối tượng, chứ có phải đối tượng đâu nên không thể nói “đối tượng trả về” :v
đọc chậm lại.
Code chạy ổn mà anh.
wandbox.org
[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ
#include #include using namespace std; int main() { string s = "Hello"; for(char c:s) cout << c << endl; }
Tại sao lại có cái thứ cú pháp kỳ quặc thế nhỉ
Sáng sủa hơn bao nhiêu.
Code của thớt chưa xét [A-Z] với [a-z].
Code của thớt còn sáng chán, code ở đây còn dị hơn: http://en.cppreference.com/w/cpp/algorithm/for_each
Hàm này là bộ hàm trong algorithm, ít thấy xài vì cú pháp kiểu khó nhớ so với ngôn ngữ khác
@thớt
Thường thì người ta xài tham chiếu kiểu:
để giảm đi bước copy.
Nhưng em tưởng tham chiếu là 1 bí danh của đối tượng nên nói là đối tượng trả về vẫn đúng chứ anh.
Em bê nguyên 1 code của bên codefights sang đây luôn:
Thấy họ toàn ghi thế.
Tóm lại cái vòng for ấy nó có tác dụng duyệt từng phần tử của mảng đúng không anh.
–> Đúng.
ủa bạn không đọc các cmt trên sao?
String nhập vào mà có kí tự hoa thì e đoán hàm của bác nghẻo luôn!
Em chỉ lấy ví dụ để hỏi cách hoạt động của vòng for ấy thôi.
Còn cái code này em copy của 1 bài nó chỉ cho chuỗi nhập vào gồm những kí tự từ a --> z thôi.
À. vòng for đó của bạn chỉ tương đương với:
for(int i=0; i<strlen(inputString); i++){
char c = inputString[i];
…
}
Em đoán như thế ạ!
std::string
không phảichar
à vâng. em biết ạ. do em code thuần C. nên cũng k rõ bên C++ get char at kiểu gì. cái đó em viết bên C ạ!
Vậy bạn đã hiểu ra vấn đề :v
Có thể private luôn cả constructor mà chỉ để 1 cin và 1 cout tồn tại thôi.