01/10/2018, 11:35

Khi viết 1 hàm thì lệnh return có thể trả về 1 mảng ko mn

hello,viet gi cho đỉ 20

明玉 viết 13:41 ngày 01/10/2018

C++ thì bạn trả về cái gì cũng được hết á. Vô tư.
Nhưng sau này bạn học lên cao thì phải hiểu cách nó làm thế nào trong stack, để còn optimize nữa.

Vinh viết 13:48 ngày 01/10/2018

nếu nó trả về mảng thì lưu thế nào ạ

Vinh viết 13:46 ngày 01/10/2018

bài toán tìm các ước của 1 số ,muốn nó return tất cả các ước thì làm sao ạ

viết 13:40 ngày 01/10/2018

trả về std::vector<int>

#include <iostream>
#include <vector>

std::vector<int> divisors(int n)
{
    std::vector<int> a;
    for (int i = 1; i <= n; ++i)
        if (n % i == 0)
            a.push_back(i);
    return a;
}

int main()
{
    auto a = divisors(10);
    for (int x : a) std::cout << x << ' ';

    //hoặc dài dòng hơn
    std::vector<int> a = divisors(10);
    for (int i = 0; i < a.size(); ++i)
        std::cout << a[i] << ' ';
}
Vinh viết 13:50 ngày 01/10/2018

nếu muôn tự viết hàm thì viết sao ạ

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

tự viết hàm là sao…

Vinh viết 13:45 ngày 01/10/2018

ko dùng đến thư viện vector

viết 13:37 ngày 01/10/2018

vậy thì em phải có 1 con trỏ sẵn ở chỗ trả về, rồi truyền con trỏ này vào cái hàm tìm ước kia. Trong hàm truyền ước duyệt 2 lần, lần đầu tiên đếm xem n có bao nhiêu ước, rồi cấp phát bộ nhớ cho đủ, rồi vòng lặp thứ 2 cho các ước đó vào

int* getDivisors(int n, int& count)
{
    // đếm xem n có bao nhiêu ước
    count = 0;
    for (int i = 1; i <= n; ++i)
        if (n % i == 0)
            count++;
    // cấp phát bấy nhiêu chỗ trống cho mảng a
    int* a = new int[count];
    // copy các ước đó vào mảng a
    for (int i = 1, j = 0; i <= n; ++i)
        if (n % i == 0)
            a[j++] = i;
    return a;
}

int main()
{
    int  count;
    int* a = getDivisors(10, count);
    for (int i = 0; i < count; ++i)
        std::cout << a[i] << " ";

    // nhớ phải giải phóng a sau khi xài xong
    delete[] a;
}

xài thẳng vector cho nó khỏe, khỏi phải nhớ cấp phát bao nhiêu, giải phóng lúc nào, khỏi cần biến count phụ trợ để biết a có bao nhiêu phần tử, v.v…, và viết hàm trả về thẳng cái mảng cho dễ hiểu thay vì phải trả về con trỏ

Vinh viết 13:37 ngày 01/10/2018

số là do mình nhâp vào nên chỗ n%i==0 có vẻ ko đúng a ạ

nghia viết 13:50 ngày 01/10/2018

auto a = divisors(10);

Anh cho em hỏi tại sau ở đây lại dùng keywork auto?

HK boy viết 13:36 ngày 01/10/2018

Để tự động xác định kiểu cho biến a gán với divisors(10).

Bạn google “auto c++11”.

nghia viết 13:36 ngày 01/10/2018

cảm ơn anh! Chứ hồi đó em đọc thì có auto thì cũng như không có auto! Nên em thắc mắc! vậy là em chậm công nghệ rồi!

viết 13:36 ngày 01/10/2018

do lười… std::vector<int> vs auto cái nào dễ hơn

nghia viết 13:39 ngày 01/10/2018

Chào anh tntxtnt!
tại em không biết nên hỏi chứ không có gì hết anh! Mà nhờ anh em mới biết thêm C++ 11

Nguyễn Quốc Hoàng viết 13:47 ngày 01/10/2018

trong C thì HOÀN TOÀN ĐƯỢC, bạn chỉ cần hiểu về con trỏ là được

Bài liên quan
0