数组元素的位置

时间:2013-11-25 19:13:53

标签: c++ arrays

#include <iostream>

using namespace std;

int main()
{
    int a, count = 0;
    cin >> a;
    int x[a], y[a], istix[a], istiy[a], br1 = 0, br2 = 0;

    for (int i = 0; i < a; i++)
        cin >> x[i] >> y[i];

    for (int i = 0; i < a; i++){
        for (int j = 0; j < a; j++){
            if(x[i] == y[j]){
                count++;
                istix[br1] = i;
                istiy[br2] = j;
                br1++;
                br2++;
            }
        }
    }

    if (count >= 3){
        cout << "Pozicii na isti elementi vo prvata niza:" << endl;
        for (int i = 0; i < br1; i++)
            cout << istix[i] << endl;
        cout << "Pozicii na isti elementi vo vtorata niza:" << endl;
        for (int i = 0; i < br2; i++)
            cout << istiy[i] << endl;
    }

    return 0;
}

我正在编写一个任务,我必须检查两个数组中是否有超过3个元素具有相同的值,如果是这样,我必须在两个数组中输出它们的索引。

我的程序正确输出第一个数组,但不适用于第二个数组。我对两者使用了相同的方法,为什么它不起作用?

5
9 4
2 5
4 1
5 9
12 59
Pozicii na isti elementi vo prvata niza:
0
2
3
Pozicii na isti elementi vo vtorata niza:
3
0
1

这是实际输出,除最后一个数组外,一切都正确:

3
0
1

应该是:

0
1
3

1 个答案:

答案 0 :(得分:0)

int a, count = 0;
cin >> a;
int x[a], y[a], istix[a], istiy[a] ...; // WRONG!

这不是有效的C ++代码。你不能声明一个未知大小的数组 - 它必须是一个常量表达式。

如果您需要动态数组,则需要使用new(以及相应的delete)或使用适合您的工作容器(例如std::vector)。< / p>

int a;
cin >> a;
int* x = new int[a]; // this will create a dynamic array with a elements
...
delete [] x;

或者

int a;
cin >> a;
std::vector<int> vec(a);