std::find返回vec.end(),而不管值是否在vector中
std::find returns vec.end() regardless of whether or not value is in vector
首先,我创建两个指向向量的指针(它们本身通过另一个指针访问)。这不是必要的步骤,但无论我使用的是指针对指针还是指针本身,问题都会持续存在。
std::vector<Int_t> * FV = &DataStorage->fFirstVector;
std::vector<Float_t> * SV = &DataStorage->fSecondVector;
然后我调用find函数。我这样做的目的是,如果firstDatum和secondDatum的值在第一个或第二个向量中分别是而不是,则将这两个值推到它们各自的向量中。
if( std::find(FV->begin(), FV->end(), firstDatum) == FV->end()
or std::find(SV->begin(), SV->end(), secondDatum) == SV->end() )
{
FV->push_back(firstDatum);
SV->push_back(secondDatum);
}
问题是firstDatum和secondDatum被推入矢量,无论它们是否已经存在,导致两个矢量充满了许多重复项。向量的大小完全相同,条目的数量与数据点的数量完全相同(因此,并不是第一个子句的求值结果为true,并将重复项推送到第二个向量中)。
我在这里犯了什么明显的错误吗?有人能给我一些建议吗?我已经搞了一段时间了,就是弄不清出了什么问题。我已经检查了所有的数据类型,尝试放弃不必要的指针,等等,但无法弄清楚。
(唯一的限制:我需要使用向量,同样,访问这些向量的唯一方法是通过DataStorage指针。)
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void Push_if_not_found(
std::vector<int> * FV,
std::vector<float> * SV,
int firstDatum,
float secondDatum )
{
if( std::find( FV->begin(), FV->end(), firstDatum ) == FV->end() )
{
FV->push_back(firstDatum);
}
if( std::find( SV->begin(), SV->end(), secondDatum ) == SV->end() )
{
SV->push_back(secondDatum);
}
}
int main()
{
struct ds
{
std::vector<int> fFirstVector;
std::vector<float> fSecondVector;
} ds1;
ds1.fFirstVector.push_back(1);
ds1.fSecondVector.push_back(1);
ds * DataStorage = &ds1;
std::vector<int> * FV = &DataStorage->fFirstVector;
std::vector<float> * SV = &DataStorage->fSecondVector;
Push_if_not_found( FV, SV, 1, 1 );
if( FV->size() != 1 || SV->size() != 1)
{
cout << "FAILED" << endl;
return 0;
}
Push_if_not_found( FV, SV, 2, 1 );
if( FV->size() != 2 || SV->size() != 1)
{
cout << "FAILED" << endl;
return 0;
}
Push_if_not_found( FV, SV, 2, 2 );
if( FV->size() != 2 || SV->size() != 2)
{
cout << "FAILED" << endl;
return 0;
}
Push_if_not_found( FV, SV, 3, 3 );
if( FV->size() != 3 || SV->size() != 3)
{
cout << "FAILED" << endl;
return 0;
}
for( auto v : ds1.fFirstVector )
{
cout << v << " ";
}
cout << endl;
for( auto v : ds1.fSecondVector )
{
cout << v << " ";
}
cout << endl;
return 0;
}
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 检查输入是否不是整数或数字
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 此代码是否违反一个定义规则
- 是否需要删除包含对象的"pair"?
- 是否可以从int转换为enum类类型
- 无论条件是否为true,if总是在c++中执行
- 如何找到大小'x'数组是否完全填充,在C++?
- 检查值是否在集合p1和p2中,但不在p3中
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 是否有用于迭代向量的函数,而不管其类型如何?
- 是否允许访问联合成员的公共基类,而不管存储的类型如何
- std::find返回vec.end(),而不管值是否在vector中
- 是否有一种方法可以识别Windows命令提示符,而不管文件名或位置
- 不管是否初始化,使用sizeof(p[0])真的无害吗?