C ++数组大小或长度并使用find

时间:2015-05-08 08:16:17

标签: c++

我想弄清楚两个问题。如何找到阵列的大小。我使用了一个网站,他们展示了这样的东西。

    int myarray[5];
    int main()
    {
        cout<<myarray.size()<<endl;
        return 0;
    }

我知道还有另一种方式,但我知道你可以调整尺寸,或者我认为它的长度,任何人都可以帮忙吗?

我也在尝试使用两个数组并在其中找到唯一的数字,所以我做了:

int myarray1[5]={2, 3, 4, 5, 6};
int myarray2[3]={2, 3, 4};

int main()
{
    for (int i=0; 0<size.array1; i++){
            for (int j=0; 0<size.array2; j++){

                if array[i]!=array[j]{
                        <<cout i;

                }
            }


    }
}

你们有什么想法?

2 个答案:

答案 0 :(得分:1)

数组不是类,也没有成员函数。所以这句话

cout<<myarray.size()<<endl;

无效,编译器将发出错误。

要获得数组的大小,你可以编写

cout << sizeof( myarray ) / sizeof( *myarray ) <<endl;

或者您可以使用标头std::extent

中声明的课程<type_traits>

例如

#includde <type_traits>

//...

cout << std::extent<decltype( myarray )>::value <<endl;

另一种方法是使用标头std::array中声明的标准类<array>而不是普通数组。例如

#include <iostream>
#include <array>

std::array<int, 5> myarray;

int main()
{
    std::cout << myarray.size() << std::endl;

    return 0;
}

如果要在两个数组中查找唯一元素并对数组进行排序,则可以使用标题std::symmetric_difference中声明的标准算法<algorithm>。例如

#include <iostream>
#include <iterator>
#include <algorithm>


int main()
{
    int myarray1[5] = { 2, 3, 4, 5, 6 };
    int myarray2[3] = { 2, 3, 4 };

    for ( int x : myarray1 ) std::cout << x << ' ';
    std::cout << std::endl;

    for ( int x : myarray2 ) std::cout << x << ' ';
    std::cout << std::endl;

    std::set_symmetric_difference( myarray1, myarray1 + 5,
                                   myarray2, myarray2 + 3,
                                   std::ostream_iterator<int>( std::cout, " " ) );
    std::cout << std::endl;                                


    return 0;
}

程序输出

2 3 4 5 6 
2 3 4 
5 6 

答案 1 :(得分:0)

有关普通静态数组的答案,请参阅How do I determine the size of my array in C? - 它的工作原理与C语言相同。( - &gt; sizeof(myarray)/sizeof(myarray[0])

但是如果你正在使用C ++ [11],你可能想要完全避免这样的数组,而是使用std::array

#include <iostream>
#include <array>

int main()
{
    std::array<int, 5u> myarray;
    std::cout<< myarray.size() << std::endl; // valid
    return 0;
}

或其他代码:

int main()
{
    std::array<int, 5u> myarray1 = {2, 3, 4, 5, 6};
    std::array<int, 3u> myarray2 = {2, 3, 4};
    for (unsigned i=0; 0 < size.array1; ++i){
        for (unsigned j=0; 0<size.array2; ++j){
            if (array[i]!=array[j]{
                    std::cout << i << " ";
            }
        }
    }
}