Thắc mắc về kiểu dữ liệu auto và set

1/ Cho em hỏi từ khóa auto trong code này là gì ạ?.
2/ dòng code này là gán arr1 cho set resSet đúng không ạ?

std::set<std::string> resSet (arr1.begin(), arr1.end());

Mọi người giải thích giúp em với ạ. Em cảm ơn nhiều :sunny:

std::vector<std::string> mergeStringArr(std::vector<std::string> arr1, std::vector<std::string> arr2)
{
    std::set<std::string> resSet (arr1.begin(), arr1.end());
    for (auto str : arr2)
    {
        auto search = resSet.find(str);
        if (search != resSet.end()) // found
        {
            resSet.erase(search);
        }
    }
    std::vector<std::string> res (resSet.begin(), resSet.end());
    return res;
}

Mình thì mình sẽ thêm vào vector kq (khởi tạo rỗng) thay vì xóa đi :slight_smile: xóa đi thì nó phải lôi mấy phần tử đằng sau lên.

1/ trình biên dịch tự chọn kiểu đúng
2/ nó là dựng theo arr1 :smiley: vì tạo đối tượng.

5 Likes

1/ Bạn có thể hiểu đơn giản auto là compiler sẽ lấy kiểu dữ liệu ở bên phải để gán cho bên trái. Chi tiết xem thêm tại đây

2/ Bạn xem constructor kiểu số (2) tại cppreference cho std::set nha

5 Likes

Dễ hiểu, em cảm ơn nhiều ạ :smiley:

Mà nếu em cho một hàm là kiểu dữ liệu auto thì mình trả về kiểu gì cx được đúng không ạ?

Ý bạn là kiểu trả về của hàm là auto? Nếu vậy thì nó sẽ được quyết định bằng kiểu trả về trong return theo deduction rule.

4 Likes

Em đọc tiếng anh thấy hơi lú không hiểu đc như anh, có phải là vầy không ạ
ví dụ như cho hàm
auto ten (int x, float b) {
thì có thể là return x;
hoặc return b;
} kiểu dữ liệu nào cũng được đúng không ạ

If there are multiple return statements, they must all deduce to the same type

auto f(bool val)
{
    if (val) return 123; // deduces return type int
    else return 3.14f;   // error: deduces return type float
}

Có gì mà cần tiếng anh cao siêu đâu… cái câu bạn vừa hỏi có sẵn luôn ví dụ ngay link trên kia rồi đó :slight_smile:

4 Likes

Vâng em hiểu rồi, còn cái vòng for (auto str : arr2) thì nó sẽ như là mỗi mỗi phần tử của string arr2 sẽ là mỗi phần tử của str với kiểu dữ liệu auto được gán kiểu dữ liệu là string của arr2 đúng không ạ

Syntax vòng for đó gọi là range-based for loop. Bạn tự search trên cpp reference chi tiết nhé.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?