Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C 2-D数组中查找一个值的多个索引_C++_Arrays - Fatal编程技术网

C++ 在C 2-D数组中查找一个值的多个索引

C++ 在C 2-D数组中查找一个值的多个索引,c++,arrays,C++,Arrays,我是C语言的新手,但我有一些很好的matlab技能。在matlab中,我可以使用[x,y]=find(matrix==any_value),如果矩阵中存在给定值,它会返回给我很多x和y-索引 我尝试了一些函数作为find,但我了解到它只返回矩阵中第一次出现的值的索引 假设我在C中有一个二维双精度数组,其中有一些重复值,我如何在这个矩阵中找到重复值的x和y坐标?在C中,你只能返回一个值。结果是夫妻,你需要不止一个。我会声明一个点结构并填充这些对象的数组;函数将返回找到的结果数。。。要开始,请执行以

我是C语言的新手,但我有一些很好的matlab技能。在matlab中,我可以使用
[x,y]=find(matrix==any_value)
,如果矩阵中存在给定值,它会返回给我很多
x
y
-索引

我尝试了一些函数作为find,但我了解到它只返回矩阵中第一次出现的值的索引


假设我在C中有一个二维双精度数组,其中有一些重复值,我如何在这个矩阵中找到重复值的
x
y
坐标?

在C中,你只能返回一个值。结果是夫妻,你需要不止一个。我会声明一个点结构并填充这些对象的数组;函数将返回找到的结果数。。。要开始,请执行以下操作:

struct point {
  int x;
  int y;
};

int find_stuff(int* mat[], int dimX, int dimY, int desired, struct point out[])
{
    int ret=0;
    int x, y;

    for(y=0; y<;dimY; y++)
        for (x=0; x<dimX; x++)
            if (mat[y][x] == desired) {
                out[ret].x = x;
                out[ret].y = y;
                ret++;
            }

    return ret;
}

void test_the_function(int* mat[], int dimX, int dimY, int desired)
{
    struct point results[100];
    int i,n;

    n = find_stuff(mat, dimX, dimY, desired, results);

    for (i=0; i<n; i++)
        printf("%i\t(%i, %i)\n", i, results[i].x, results[i].y);
}
结构点{
int x;
int-y;
};
int find_stuff(int*mat[],int dimX,int dimY,int desired,struct point[]))
{
int-ret=0;
int x,y;

对于C中的(y=0;y),您只能返回一个值。结果是成对的,您需要不止一个。我将声明一个点结构并填充这些对象的数组;该函数将返回找到的结果数…以便开始,例如:

struct point {
  int x;
  int y;
};

int find_stuff(int* mat[], int dimX, int dimY, int desired, struct point out[])
{
    int ret=0;
    int x, y;

    for(y=0; y<;dimY; y++)
        for (x=0; x<dimX; x++)
            if (mat[y][x] == desired) {
                out[ret].x = x;
                out[ret].y = y;
                ret++;
            }

    return ret;
}

void test_the_function(int* mat[], int dimX, int dimY, int desired)
{
    struct point results[100];
    int i,n;

    n = find_stuff(mat, dimX, dimY, desired, results);

    for (i=0; i<n; i++)
        printf("%i\t(%i, %i)\n", i, results[i].x, results[i].y);
}
结构点{
int x;
int-y;
};
int find_stuff(int*mat[],int dimX,int dimY,int desired,struct point[]))
{
int-ret=0;
int x,y;

对于(y=0;y,您必须编写自己的函数,因为C没有用于查找元素的内置函数。 此函数在找到第一个实例后不会“中断”,而是会一直持续到列表的末尾

保留索引的空白数组。
索引[]
无论何时找到元素,都将其推入此索引数组。
在函数结束时,所有索引将整齐地存储在x、y坐标(或索引)数组中。

您必须编写自己的函数,因为C没有用于查找元素的内置函数。 此函数在找到第一个实例后不会“中断”,而是会一直持续到列表的末尾

保留索引的空白数组。
索引[]
无论何时找到元素,都将其推入此索引数组。
函数结束时,所有索引将整齐地存储在x、y坐标(或索引)数组中。

您可以这样做:

#include <vector>
#include <utility>
#include <iostream>

using namespace std;

int main(void)
{
    const double val = 3.14;
    double a[100][100];
    /* ... initialize a somehow ... */
    vector<pair<int,int>> pos;

    for ( int x = 0; x < 100; ++x )
        for ( int y = 0; y < 100; ++y )
            if ( a[x][y] == val )
                pos.push_back( make_pair(x,y) );

    std::for_each( v.begin(), v.end(), [](pair<int,int> p){
        cout << '(' << p.first << ',' << ')' << endl;
    });
}
#包括
#包括
#包括
使用名称空间std;
内部主(空)
{
常数双值=3.14;
双a[100][100];
/*…以某种方式初始化*/
向量位置;
对于(int x=0;x<100;++x)
对于(int y=0;y<100;++y)
如果(a[x][y]==val)
位置推回(形成一对(x,y));
标准::对于每个(v.begin(),v.end(),[](对p){

你可以这样做:

#include <vector>
#include <utility>
#include <iostream>

using namespace std;

int main(void)
{
    const double val = 3.14;
    double a[100][100];
    /* ... initialize a somehow ... */
    vector<pair<int,int>> pos;

    for ( int x = 0; x < 100; ++x )
        for ( int y = 0; y < 100; ++y )
            if ( a[x][y] == val )
                pos.push_back( make_pair(x,y) );

    std::for_each( v.begin(), v.end(), [](pair<int,int> p){
        cout << '(' << p.first << ',' << ')' << endl;
    });
}
#包括
#包括
#包括
使用名称空间std;
内部主(空)
{
常数双值=3.14;
双a[100][100];
/*…以某种方式初始化*/
向量位置;
对于(int x=0;x<100;++x)
对于(int y=0;y<100;++y)
如果(a[x][y]==val)
位置推回(形成一对(x,y));
标准::对于每个(v.begin(),v.end(),[](对p){

您是否可以与适当的函数fn一起使用。一些提示:您是否考虑过在
中使用
std::find
算法?您可以指定搜索范围。当与循环结合使用时,您可以轻松地迭代所有发生的事件。另外请注意,由于
C++11
还有
std::find_if
std::find_if
不是< < /> >,它更一般。你也可以把<代码> STD::查找< /Co>循环到你自己的迭代器中,就像它在Boost的 FordyIdter中的代码>,这更接近于你在MATLAB中所拥有的。这个问题是关于C还是C++?问题和标题是C,但是标签是C++,它似乎提示了可能不相关的C++答案…您可以与适当的函数fn一起使用。一些提示:您是否考虑过在
中使用
std::find
算法?您可以指定搜索范围。当与循环结合使用时,您可以轻松地迭代所有发生的事件。另外请注意,由于
C++11
还有
std::find_if
std::find_if_if_,更一般。你也可以把“代码> STD::查找< /COD>循环到你自己的迭代器中,就像它在Boost的”FordyIdter中的代码>,这更接近于你在MATLAB中所拥有的。这个问题是关于C还是C++?问题和标题是C,但是TAG是C++,它似乎提示了可能不相关的C++答案……有点静态,但OP说他是C语言的新手,所以这至少是一个线索。除此之外,我在代码中需要的是矩阵out[]和int ret,我能在find_stuff函数中同时返回它们吗?@mad:在C语言中,函数只返回一个值(通常返回数组不是一个好主意)…你别无选择,只能填充数组并返回最终长度这有点静态,但OP说他。她是C语言的新手,所以这至少是一个线索。除此之外,我在你的代码中需要的是矩阵out[]和int ret,我能在find_stuff函数中同时返回它们吗?@mad:在C语言中,函数只返回一个值(通常返回数组不是一个好主意)…除了填充数组并返回最终长度之外,您别无选择