Object[] object1 ; //数组定义 Vector<Object> object2;//Vector定义 object2 = new Vector<Object>(Arrays.asList(o1));// array -> vector object1 = object2 .toArray( new Object[_object2 .size()]);// vector ->array
+(NSArray<NSNumber *> *)findPeakPosWithArray:(NSArray<NSNumber *> *)array
{
vector<int> diff_v(array.count - 1, 0);
// 计算V的一阶差分和符号函数trend
for (vector<int>::size_type i = 0; i != diff_v.size(); i++)
{
NSNumber *num = array[i + 1];
int iNextNum = [num intValue];
int iCurrentNum = [array[i] intValue];
if (iNextNum - iCurrentNum >0)
diff_v[i] = 1;
else if (iNextNum - iCurrentNum < 0)
diff_v[i] = -1;
else
diff_v[i] = 0;
}
// 对Trend作了一个遍历
for (int i = (int)diff_v.size() - 1; i >= 0; i--)
{
if (diff_v[i] == 0 && i == diff_v.size() - 1)
{
diff_v[i] = 1;
}
else if (diff_v[i] == 0)
{
if (diff_v[i + 1] >= 0)
diff_v[i] = 1;
else
diff_v[i] = -1;
}
}
NSMutableArray *result = [NSMutableArray arrayWithCapacity:diff_v.size()];
for (vector<int>::size_type i = 0; i != diff_v.size() - 1; i++)
{
if (diff_v[i + 1] - diff_v[i] == -2)
{
[result addObject:@(i + 1)];
}
}
return result;
}
@end
/*
int iarray[] = {1,2,3,4,5,6,7,8,9,0};
//count: iarray数组个数
size_t count=sizeof(iarray)/sizeof(int);
//int数组初始化 ivec3
vector<int> ivec3(iarray,iarray+count);
vector<int> iPos;
findPeak(ivec3, iPos);*/
void findPeak(const vector<int>& v, vector<int>& peakPositions)
{
vector<int> diff_v(v.size() - 1, 0);
// 计算V的一阶差分和符号函数trend
for (vector<int>::size_type i = 0; i != diff_v.size(); i++)
{
if (v[i + 1] - v[i]>0)
diff_v[i] = 1;
else if (v[i + 1] - v[i] < 0)
diff_v[i] = -1;
else
diff_v[i] = 0;
}
// 对Trend作了一个遍历
for (int i = diff_v.size() - 1; i >= 0; i--)
{
if (diff_v[i] == 0 && i == diff_v.size() - 1)
{
diff_v[i] = 1;
}
else if (diff_v[i] == 0)
{
if (diff_v[i + 1] >= 0)
diff_v[i] = 1;
else
diff_v[i] = -1;
}
}
for (vector<int>::size_type i = 0; i != diff_v.size() - 1; i++)
{
if (diff_v[i + 1] - diff_v[i] == -2)
peakPositions.push_back(i + 1);
}
}

[转]STL中vector转数组(实际是数组的指针)
感谢:http://topic.csdn.net/t/20050429/20/3976956.html
感谢:http://yzyanchao.blogbus.com/logs/47796444.html
不过那边是转载自《effective stl》。
std::vector很方便,但有时调用的函数的参数规定是数组,需要将vector转为数组,另外开辟一个空间,将vector一项项复制过去代价过大,可用下面的方法。
给定一个
vector<int> v;
表达式v[0]生产一个指向vector中第一个元素的引用,所以,&v[0]是指向那个首元素的指针。vector中的元素被C++标准限定为存储在连续内存中,就像是一个数组,所以,如果我们想要传递v给这样的C风格的API:
void doSomething(const int* pInts, size_t numInts);
我们可以这么做:
doSomething(&v[0], v.size());
也许吧。可能吧。唯一的问题就是,如果v是空的。如果这样的话,v.size()是0,而&v[0]试图产生一个指向根本就不存在的东西的指针。这不是件好事。其结果未定义。一个较安全的方法是这样:
if (!v.empty()) {
doSomething(&v[0], v.size());
}
如果你在一个不好的环境中,你可能会碰到一些半吊子的人物,他们会告诉你说可以用v.begin()代替&v[0],因为(这些讨厌的家伙将会告 诉你)begin返回指向vector内部的迭代器,而对于vector,其迭代器实际上是指针。那经常是正确的,但正如条款50所说,并不总是如此,你 不该依赖于此。begin的返回类型是iterator,而不是一个指针,当你需要一个指向vector内部数据的指针时绝不该使用begin。如果你基 于某些原因决定键入v.begin(),就应该键入&*v.begin(),因为这将会产生和&v[0]相同的指针,这样可以让你有更多 的打字机会,而且让其他要弄懂你代码得人感觉到更晦涩。坦白地说,如果你正在和告诉你使用v.begin()代替&v[0]的人打交道的话,你该 重新考虑一下你的社交圈了。(译注:在VC6中,如果用v.begin()代替&v[0],编译器不会说什么,但在VC7和g++中这么做的话, 就会引发一个编译错误)
南来地,北往的,上班的,下岗的,走过路过不要错过!
======================个性签名=====================
之前认为Apple 的iOS 设计的要比 Android 稳定,我错了吗?
下载的许多客户端程序/游戏程序,经常会Crash,是程序写的不好(内存泄漏?刚启动也会吗?)还是iOS本身的不稳定!!!
如果在Android手机中可以简单联接到ddms,就可以查看系统log,很容易看到程序为什么出错,在iPhone中如何得知呢?试试Organizer吧,分析一下Device logs,也许有用.
浙公网安备 33010602011771号