由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ 程序求助
相关主题
相关话题的讨论汇总
话题: c++话题: prev话题: vector话题: longest话题: current
进入Programming版参与讨论
1 (共1页)
C******a
发帖数: 32
1
考虑有相同元素情形.需要给出compact, clean code, C or C++.
Write a C++ program that print the first longest
ascending or descending contiguous substring for a vector of integers. Given
a vector
4, 2, 1, 2, 3, 4, 3, 5, 1, 2, 4, 6, 5
the program would print:
1, 2, 3, 4
算法不难,但写不出简短的clean code. 欢迎讨论.
t****t
发帖数: 6806
2
你先写一个出来大家看看。

Given

【在 C******a 的大作中提到】
: 考虑有相同元素情形.需要给出compact, clean code, C or C++.
: Write a C++ program that print the first longest
: ascending or descending contiguous substring for a vector of integers. Given
: a vector
: 4, 2, 1, 2, 3, 4, 3, 5, 1, 2, 4, 6, 5
: the program would print:
: 1, 2, 3, 4
: 算法不难,但写不出简短的clean code. 欢迎讨论.

C******a
发帖数: 32
3
thrust, 请指出我的语法错误, 谢谢!
I am thinking about sth like but does not compile:
template
class LongestSubstr
{
..................
public:
void operator() (int elem)
{
if (Compare_lessequal(current, elem))
{
.....
}
....
}
};
int main()
{
...................
LongestSubstr() >

【在 t****t 的大作中提到】
: 你先写一个出来大家看看。
:
: Given

X****r
发帖数: 3557
4
你混淆了类和对象。23行应该调用一个Compare_lessequal类的实例的operator(),
这个实例可以从LongestSubstr的构建函数中传进来。

【在 C******a 的大作中提到】
: thrust, 请指出我的语法错误, 谢谢!
: I am thinking about sth like but does not compile:
: template
: class LongestSubstr
: {
: ..................
: public:
: void operator() (int elem)
: {
: if (Compare_lessequal(current, elem))

z****e
发帖数: 2024
5
我写了一个,运行貌似可以。
但是有一个极其诡异的bug
在 longest_mono_seq ::operator() 里面,如果把开头的四个打印语句去掉,运行结
果完全错误。
可是那几个打印是take const的,不会修改的呀?
很奇怪。我也解释不了。
#include
#include
#include
#include
using namespace std;
template//a template to print container
void prints(const Con& c, string name){
cout< typename Con::const_iterator it=c.begin();
for(;it!=c.end();++it){
cout<<*it<<" ";
}
cout< }
class longest_mono_seq{//the core function object
t****t
发帖数: 6806
6
functor in for_each can have local state.
t****t
发帖数: 6806
7
why do you put prev as an auto variable? shouldn't it be a part of the state?

【在 z****e 的大作中提到】
: 我写了一个,运行貌似可以。
: 但是有一个极其诡异的bug
: 在 longest_mono_seq ::operator() 里面,如果把开头的四个打印语句去掉,运行结
: 果完全错误。
: 可是那几个打印是take const的,不会修改的呀?
: 很奇怪。我也解释不了。
: #include
: #include
: #include
: #include

t****t
发帖数: 6806
8
and, why do you guys all want to use functors? what's the benefit? functors
do not mean "clean code" automatically.

state?

【在 t****t 的大作中提到】
: why do you put prev as an auto variable? shouldn't it be a part of the state?
z****e
发帖数: 2024
9
是的,把prev 改成一个private 就对了。

state?

【在 t****t 的大作中提到】
: why do you put prev as an auto variable? shouldn't it be a part of the state?
z****e
发帖数: 2024
10
是的,把prev 改成一个private 就对了。
即使把打印去掉,也是对的了。
相关主题
进入Programming版参与讨论
C******a
发帖数: 32
11
多谢大家,我已经fixed my compiler error, final version pretty close to zaoxie
's.
thrust 大侠,我用functor的原因是make a generic version.当然在这个例子里没有明
显的优点.

Given

【在 C******a 的大作中提到】
: 考虑有相同元素情形.需要给出compact, clean code, C or C++.
: Write a C++ program that print the first longest
: ascending or descending contiguous substring for a vector of integers. Given
: a vector
: 4, 2, 1, 2, 3, 4, 3, 5, 1, 2, 4, 6, 5
: the program would print:
: 1, 2, 3, 4
: 算法不难,但写不出简短的clean code. 欢迎讨论.

z****e
发帖数: 2024
12
如下这个用了两次扫,读起来更好些吧。prints 用前面那个。
这个你说算不算compact and clearn 了?
template
class longest_mono_seq{
public:
longest_mono_seq():cnt(true){ }
void operator()(const int¤t){
if(cnt){
prev=current;
cnt=false;
return;
}
if(Comp(current, prev)){
if (vtmp.size()==0) vtmp.push_back(prev);
vtmp.push_back(current);
}
else{
if(vtmp.size()>vstore.size())
vtmp.swap(vstore);
vtmp.clear();
}
prev=current;
}
operator vect
C******a
发帖数: 32
13
This looks good and,
1) you don't really need a temp vector;
2) do you consider cases like 1 1 1 3 3 2 2 ?

【在 z****e 的大作中提到】
: 如下这个用了两次扫,读起来更好些吧。prints 用前面那个。
: 这个你说算不算compact and clearn 了?
: template
: class longest_mono_seq{
: public:
: longest_mono_seq():cnt(true){ }
: void operator()(const int¤t){
: if(cnt){
: prev=current;
: cnt=false;

z****e
发帖数: 2024
14
could you please show me how to avoid using a tmp vector?
i didn't consider equality and equivalence.

【在 C******a 的大作中提到】
: This looks good and,
: 1) you don't really need a temp vector;
: 2) do you consider cases like 1 1 1 3 3 2 2 ?

C******a
发帖数: 32
15
you just remember offset and length of longest substring found so far.

【在 z****e 的大作中提到】
: could you please show me how to avoid using a tmp vector?
: i didn't consider equality and equivalence.

z****e
发帖数: 2024
16
thanks。it's far more efficient than storing a vector.

【在 C******a 的大作中提到】
: you just remember offset and length of longest substring found so far.
b******o
发帖数: 5644
17
很久没写C++了。如果不是什么class的东西。用值做map的key,然后把key一列,全解
决。
b******o
发帖数: 5644
18
很久没写C++了。如果不是什么class的东西。用值做map的key,然后把key一列,全解
决。
1 (共1页)
进入Programming版参与讨论
相关主题
相关话题的讨论汇总
话题: c++话题: prev话题: vector话题: longest话题: current