标题:关于向量的问题,新手求教
只看楼主
moox
Rank: 2
来 自:福建
等 级:论坛游民
帖 子:92
专家分:93
注 册:2017-1-21
结帖率:82.35%
已结贴  问题点数:20 回复次数:11 
关于向量的问题,新手求教
程序代码:
#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
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:10 
代码没什么正确的地方,但这个错误提示更奇怪,你用的是什么编译器?
2017-12-27 23:22
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:10 
最大错误  
vector<vector<int>>
>> 是什么符号?
vector< vector<int> >

--------------------------------------
result.push_back(num[i]);
    你的result的元素是什么类型?  vector<int>
num[i]返回什么类型?
    int

hl928452957@gmail点com

2017-12-28 09:04
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:0 
int start=i+1,end=len-1;

start[end+1] ?  看出问题了吗
__________________________________

    vector<int> num(a);
这种初始化的要求是什么?
     具有相同的容器类型,并存放相同类型的元素

你只能通过循环去给双方赋值,如果是string型 可以直接用迭代器初始化 num(a.begin(),a.end())

__________________________________
vector<vector<int>> b=threeSum(num);
    for(int i=0;i<b.size();i++)
       cout<<b[i]<<endl;

b[i]返回什么类型?   
    vector<int>  
vector<int>有定义 operator<< 操作符吗? 或许你可以自己重载一个




hl928452957@gmail点com

2017-12-28 09:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 3楼 stop1204
在古代,vector<vector<int>> 中两个尖括号之间必须加空格,以避免被分析成操作符“>>”
但现在,C++标准要求编译器必须能正确处理这种情况。
所以我才问他用的是什么编译器
2017-12-28 09:43
stop1204
Rank: 9Rank: 9Rank: 9
来 自:福建省
等 级:贵宾
威 望:22
帖 子:295
专家分:1151
注 册:2013-9-8
得分:0 
回复 5楼 rjsp
  这个到没注意到. 11版 里面加的吗

hl928452957@gmail点com

2017-12-28 12:12
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
回复 6楼 stop1204
是C++11明确下来的,但在此之前各大编译器就已经都支持了。
2017-12-28 13:06
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



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




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

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