关于c ++:’]’令牌之前的预期主表达式(二分搜索)

Expected primary-expression before ‘]’ token(bisection search)

这件事我哪里做错了?当我编译这个的时候~

bs_01.cpp: In function ‘int main()’:
bs_01.cpp:29:25: error: expected primary-expression before ‘]’ token
cout << bisection_01(foo[]);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include"std_lib_facilities.h"
using namespace std;

template <class T>
void bisection_01(T foo[])
{
    int low, high,mid;
    low = 0;
    high = (foo.size()-1);
    mid = (high+low)/2;
    while(low!=high)
    {
        if  (foo[mid]==0)
            if (foo[mid+1]==0)
                low = mid;
            else
                cout<<"The change has occured from"<<mid+1<<" to"<<mid+2;
        if (foo[mid]==1)
            if(foo[mid-1]==1)
                high = mid;
            else
                cout<<"The change has occured from"<<mid<<" to"<<mid+1;
    }
}

int main()
{
    int foo[7] {0, 0, 0, 0, 1, 1, 1};
    cout<<bisection_01(foo[]);
}

不能将foo[]传递给函数。同时,bisection_01()返回不能插入ostreamvoid

此代码编译并似乎按您的需要执行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include
using namespace std;

template <class T, size_t size>
void bisection_01(std::array<T,size> foo)
{
    int low, high,mid;
    low = 0;
    high = (size-1);
    mid = (high+low)/2;
    while(low!=high)
    {
        if  (foo[mid]==0) {
            if (foo[mid + 1] == 0)
                low = mid;
            else
                std::cout <<"The change has occured from" << mid + 1 <<" to" << mid + 2;
        }
        if (foo[mid]==1) {
            if (foo[mid - 1] == 1)
                high = mid;
            else
                std::cout <<"The change has occured from" << mid <<" to" << mid + 1;
        }
    }
}

int main()
{
    std::array<int,7> foo{0, 0, 0, 0, 1, 1, 1};
    bisection_01(foo);
}