标题:关于向量的问题,新手求教
取消只看楼主
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
结帖率:82.35%
已结贴  问题点数:20 回复次数:5 
关于向量的问题,新手求教
程序代码:
#include<iostream>
#include<vector>
using namespace std;
vector<vector<int>> threeSum(vector<int> &num)
{
    vector<vector<int>> result;
    int len=num.size();
    for(int i=0;i<len;++i)
    {
        int target=0-num[i];
        int start=i+1,end=len-1;
        while(start<end)
        {
            if(num[start]+num[end]==target){
                result.push_back(num[i]);
                result.push_back(num[start]);
                result.push_back(num[end]);
                start++;end--;
                while(start<end&&num[start]==num[start-1])
                {
                    start++;
                }
                while((start<end) && (num[end]==start[end+1]))
                {
                    end--;
                }
            }
            else if(num[start]+num[end]<target) start++;
            else end--;
        }
        while(i<len) if(num[i]==num[i+1]) i++;
    }
    return result;
}

void main(){
    int a[]={-5,-1,0,1,2,3,4};
    vector<int> num(a);
    vector<vector<int>> b=threeSum(num);
    for(int i=0;i<b.size();i++)
       cout<<b[i]<<endl;
}

E:\练习题\三数之和为零\threeSum.cpp(4) : error C2275: 'vector<int,class std::allocator<int> >' : illegal use of this type as an expression
求三个数之和为零的算法,不知道哪里错了用向量老是实现不了,书也反了,还是不知道问题在哪。
求大佬有空看看指点下我。
另外,可以的话,推荐几个学习网址,看书还是有很多不懂得。

[此贴子已经被作者于2017-12-27 20:24编辑过]

搜索更多相关主题的帖子: vector int num start end 
2017-12-27 20:20
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
得分:0 
回复 3楼 stop1204
result.push_back(5);书上说这个是在result向量最后插入一个元素5,
result.push_back(num[i]);不能这样写吗?
2017-12-28 14:03
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
得分:0 
回复 4楼 stop1204
我看书上说输出向量中所有元素有两种形式一种是用遍历器,还有一种是
for(int i=0;i<a.size();i++)
 cout<<a[i]<<" ";
2017-12-28 14:15
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
得分:0 
回复 2楼 rjsp
我用vc++6.0,书上没有空我就没空了。。。。
E:\练习题\三数之和为零\threeSum.cpp(16) : error C2664: 'push_back' : cannot convert parameter 1 from 'int' to 'const class std::vector<int,class std::allocator<int> > &'
        Reason: cannot convert from 'int' to 'const class std::vector<int,class std::allocator<int> >'
        No constructor could take the source type, or constructor overload resolution was ambiguous
E:\练习题\三数之和为零\threeSum.cpp(17) : error C2664: 'push_back' : cannot convert parameter 1 from 'int' to 'const class std::vector<int,class std::allocator<int> > &'
        Reason: cannot convert from 'int' to 'const class std::vector<int,class std::allocator<int> >'
        No constructor could take the source type, or constructor overload resolution was ambiguous
那个向量可以理解为是一个类中有数组和捆绑一些成员函数吗?上面那个错误为什么不能在result后面加入a[i]的值?
2017-12-28 15:33
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
得分:0 
回复 5楼 rjsp
vector<vector<int> >是指二维数组对吧,我不明白为什么要用到二维数组...
我把二维数组换成一维的就不会提示有错了.但还是出不了结果...
程序代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> threeSum(vector<int> &num)
{
    vector<int> result;
    int len=num.size();
    for(int i=0;i<len;++i)
    {
        int target=0-num[i];
        int start=i+1,end=len-1;
        while(start<end)
        {
            if(num[start]+num[end]==target)
            {
                result.push_back(num[i]);
                result.push_back(num[start]);
                result.push_back(num[end]);
                start++;end--;
                while(start<end&&num[start]==num[start-1])
                {
                    start++;
                }
                while((start<end) && (num[end]==num[end+1]))
                {
                    end--;
                }
            }
            else if(num[start]+num[end]<target) start++;
            else end--;
        }
        while(i<len) if(num[i]==num[i+1]) i++;
    }
    for(vector<int>::iterator it=result.begin ();it!=result.end ();it++)
        cout<<it<<' ';
    cout<<endl;
    return result;
}

void main(){
    int a[8]={-9,-3,-1,0,1,2,3,4};
    vector<int> num(a,a+8);
    vector<int> b(threeSum(num));
    for(vector<int>::iterator it=b.begin();it!=b.end();++it)
        cout<<*it<<" ";
    cout<<endl;
}
2017-12-28 17:09
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
得分:0 
谢谢各位大佬,问题解决了,虽然程序很丑,但学到了,不少东西.
程序代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int> threeSum(vector<int> &num)
{
    vector<int> result;
    int len=num.size();
    for(int i=0;i<len;++i)
    {
        int target=0-num[i];
        int start=i+1,end=len-1;
        while(start<end)
        {
            if(num[start]+num[end]==target)
            {
                result.push_back(num[i]);
                result.push_back(num[start]);
                result.push_back(num[end]);
                start++;end--;
                while(start<end&&num[start]==num[start-1])
                {
                    start++;
                }
                while((start<end) && (num[end]==num[end+1]))
                {
                    end--;
                }
            }
            else if(num[start]+num[end]<target) start++;
            else end--;
        }
        if(num[i]==num[i+1]) while(i<len&&num[i]==num[i+1]) i++;
    }
    return result;
}

void main(){
    int a[8]={-9,-3,-1,0,1,2,3,4};
    vector<int> num(a,a+8);
    vector<int> b(threeSum(num));
    for(vector<int>::iterator it=b.begin();it!=b.end();++it)
        cout<<*it<<" ";
    cout<<endl;
}

2017-12-28 18:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-483769-1-1.html




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

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