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