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.