| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
买学问 - 大牛一对一辅导,有问必答买学问 - 专业的付费知识问答平台
共有 426 人关注过本帖
标题:vector数组的访问问题。
只看楼主 加入收藏
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:787
专家分:900
注 册:2017-1-4
结帖率:95.37%
  已结贴   问题点数:20  回复次数:4   
vector数组的访问问题。
#include <iostream>
#include <vector>
using namespace std;

void f(vector<int> v)
{
    //do something
}
void f1(int *a)
{
    //do something
}
int main()
{
   
    vector<int> v{1,2,3,4,5};
    f(v+3);//访问vector数组时,不从数组第一个元素开始访问,从数组内任意一个元素开始访问,该怎么做,就像下面a+3
   
    int a[]={1,2,3,4,5};
    f1(a+3);
    return 0;
}
2018-12-28 21:12
Jonny0201
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:45
帖 子:468
专家分:2365
注 册:2016-11-7
  得分:10 
void func(int &i) {
    //...
}
int main() {
    vector<int> vec;
    func(*(vec.begin() + 3));
}
vector 不是真正的数组, 所以只能用迭代器的模式去访问
2018-12-28 21:18
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:787
专家分:900
注 册:2017-1-4
  得分:0 
不只是访问数组中的某个元素,还要递归调用vector数组,只是数组中的某个位置之前的元素用不到了,需从该位置后开始访问

#include <iostream>
#include <vector>
using namespace std;

class Solution
{
    public:
        bool is_bst(vector<int> &v,int len);
};
bool Solution::is_bst(vector<int> &v,int len)
{
    if(v.empty()||len<=0)
        return false;
   
    int root=v[len-1];
    //划分二叉搜索树的左子树,找到该序列中第一个大于根节点的结点
    int i=0;
    for(;i<len;++i)
        if(v[i]>root)
            break;
    //判断二叉搜索树的右子树有没有小于根节点的结点
    int j=i;
    for(;j<len;++j)
        if(v[j]<root)
            return false;
   
    bool left=true;
    if(i>0)
        left=is_bst(v,i);
    bool right=true;
    if(i<len-1)
        right=is_bst(v+i,len-1-i);//这里
   
    return left&&right;
}
int main()
{
    vector<int> v{5,7,6,9,11,10,8};
   
    Solution s;
    cout<<s.is_bst(v,v.size())<<endl;
    return 0;
}
2018-12-28 21:26
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:306
帖 子:6396
专家分:37142
注 册:2011-1-18
  得分:10 
所有stl的函数都是 用一对迭代器指定区间
你的需求有什么特殊吗,不能用最常见的方法?

程序代码:
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;

template<class Iterator>
void foo( Iterator first, Iterator last )
{
    for( Iterator itor=first; itor!=last; ++itor )
        cout << ' ' << *itor;
    cout << '\n';
}

int main( void )
{
    vector<int> a = { 1,2,3,4,5 };
    foo( next(begin(a),3), end(a) );

    int b[] = { 1,2,3,4,5 };
    foo( next(begin(b),3), end(b) );
}

2018-12-29 08:41
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:787
专家分:900
注 册:2017-1-4
  得分:0 

没有特殊的需求。
2018-12-29 13:04







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.069500 second(s), 9 queries.
Copyright©2004-2019, BCCN.NET, All Rights Reserved