l*e
2 楼
想删向量里后面的元素.
元素是一个结构sn,由一个字符串name和一个整数count构成。
向量vsn已排好序。因为remove删不掉。就想用pop_back删。
while( vsn.end().count < 2 ) vsn.pop_back();
//将向量里元素中count值小于2的元素,删除。
编译时,总抱错。
error: âclass __gnu_cxx::__normal_iterator allocator > >â has no member named âcountâ
while( (vsn.end()).count < 2 ) vsn.pop_back();
while( *(vsn.end()).count < 2 ) vsn.pop_back();
while( (*(vsn.end())).count < 2 ) vsn.pop_back();
都不行。
vsn.pop_back();没错,单句执行没问题。
如何引用最后一个元素的成员变量。
或者还有
元素是一个结构sn,由一个字符串name和一个整数count构成。
向量vsn已排好序。因为remove删不掉。就想用pop_back删。
while( vsn.end().count < 2 ) vsn.pop_back();
//将向量里元素中count值小于2的元素,删除。
编译时,总抱错。
error: âclass __gnu_cxx::__normal_iterator
while( (vsn.end()).count < 2 ) vsn.pop_back();
while( *(vsn.end()).count < 2 ) vsn.pop_back();
while( (*(vsn.end())).count < 2 ) vsn.pop_back();
都不行。
vsn.pop_back();没错,单句执行没问题。
如何引用最后一个元素的成员变量。
或者还有
k*f
4 楼
end()元素越界了。
vsn[vsn.size()-1]才是最后一个元素
【在 l***e 的大作中提到】
: 想删向量里后面的元素.
: 元素是一个结构sn,由一个字符串name和一个整数count构成。
: 向量vsn已排好序。因为remove删不掉。就想用pop_back删。
: while( vsn.end().count < 2 ) vsn.pop_back();
: //将向量里元素中count值小于2的元素,删除。
: 编译时,总抱错。
: error: âclass __gnu_cxx::__normal_iterator : allocator > >â has no member named âcountâ
: while( (vsn.end()).count < 2 ) vsn.pop_back();
: while( *(vsn.end()).count < 2 ) vsn.pop_back();
vsn[vsn.size()-1]才是最后一个元素
【在 l***e 的大作中提到】
: 想删向量里后面的元素.
: 元素是一个结构sn,由一个字符串name和一个整数count构成。
: 向量vsn已排好序。因为remove删不掉。就想用pop_back删。
: while( vsn.end().count < 2 ) vsn.pop_back();
: //将向量里元素中count值小于2的元素,删除。
: 编译时,总抱错。
: error: âclass __gnu_cxx::__normal_iterator
: while( (vsn.end()).count < 2 ) vsn.pop_back();
: while( *(vsn.end()).count < 2 ) vsn.pop_back();
l*e
5 楼
搞定了,多谢。
用下标访问是个好主意。
另外,还有个问题。
需要建个树,每个节点(一个结构体)可能无后续(无指针),一个子节点,或可能三五个
子节点。
最坏情况,不可预计。
如果不是给每个节点固定分配最大值指针,比如,五个或七个指针。
可否动态实现,按需分配?
就是如何实现?
用下标访问是个好主意。
另外,还有个问题。
需要建个树,每个节点(一个结构体)可能无后续(无指针),一个子节点,或可能三五个
子节点。
最坏情况,不可预计。
如果不是给每个节点固定分配最大值指针,比如,五个或七个指针。
可否动态实现,按需分配?
就是如何实现?
t*t
6 楼
while (!vsn.empty() && vsn.back().count<2) vsn.pop_back();
因为你不能保证vsn.back()总是存在, 所以你要先看它是不是空的.
如果你知道一个iterator a, 要从这个iterator一直删到最后, 可以写
vsn.erase(a, vsn.end());
std::remove不是删除元素用的, 是把要删的元素交换到range的最后. 删除用
container.erase(). 所以对于vector, 可以这样用:
vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
这些在effective STL里都有...STL虽然很容易用, 但是完全不看手册光凭函数名想当
然, 也是不行的.
【在 l***e 的大作中提到】
: 想删向量里后面的元素.
: 元素是一个结构sn,由一个字符串name和一个整数count构成。
: 向量vsn已排好序。因为remove删不掉。就想用pop_back删。
: while( vsn.end().count < 2 ) vsn.pop_back();
: //将向量里元素中count值小于2的元素,删除。
: 编译时,总抱错。
: error: âclass __gnu_cxx::__normal_iterator : allocator > >â has no member named âcountâ
: while( (vsn.end()).count < 2 ) vsn.pop_back();
: while( *(vsn.end()).count < 2 ) vsn.pop_back();
因为你不能保证vsn.back()总是存在, 所以你要先看它是不是空的.
如果你知道一个iterator a, 要从这个iterator一直删到最后, 可以写
vsn.erase(a, vsn.end());
std::remove不是删除元素用的, 是把要删的元素交换到range的最后. 删除用
container.erase(). 所以对于vector, 可以这样用:
vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
这些在effective STL里都有...STL虽然很容易用, 但是完全不看手册光凭函数名想当
然, 也是不行的.
【在 l***e 的大作中提到】
: 想删向量里后面的元素.
: 元素是一个结构sn,由一个字符串name和一个整数count构成。
: 向量vsn已排好序。因为remove删不掉。就想用pop_back删。
: while( vsn.end().count < 2 ) vsn.pop_back();
: //将向量里元素中count值小于2的元素,删除。
: 编译时,总抱错。
: error: âclass __gnu_cxx::__normal_iterator
: while( (vsn.end()).count < 2 ) vsn.pop_back();
: while( *(vsn.end()).count < 2 ) vsn.pop_back();
d*a
7 楼
老大总结的好,这个已经是标准了:
vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
这个condition怎么做呢,一个简单易行的办法是把要抹掉的元素在loop中用0代替,然
后用用以下作为condition
static_cast(0)
【在 t****t 的大作中提到】
: while (!vsn.empty() && vsn.back().count<2) vsn.pop_back();
: 因为你不能保证vsn.back()总是存在, 所以你要先看它是不是空的.
: 如果你知道一个iterator a, 要从这个iterator一直删到最后, 可以写
: vsn.erase(a, vsn.end());
: std::remove不是删除元素用的, 是把要删的元素交换到range的最后. 删除用
: container.erase(). 所以对于vector, 可以这样用:
: vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
: 这些在effective STL里都有...STL虽然很容易用, 但是完全不看手册光凭函数名想当
: 然, 也是不行的.
vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
这个condition怎么做呢,一个简单易行的办法是把要抹掉的元素在loop中用0代替,然
后用用以下作为condition
static_cast
【在 t****t 的大作中提到】
: while (!vsn.empty() && vsn.back().count<2) vsn.pop_back();
: 因为你不能保证vsn.back()总是存在, 所以你要先看它是不是空的.
: 如果你知道一个iterator a, 要从这个iterator一直删到最后, 可以写
: vsn.erase(a, vsn.end());
: std::remove不是删除元素用的, 是把要删的元素交换到range的最后. 删除用
: container.erase(). 所以对于vector, 可以这样用:
: vsn.erase(remove(vsn.begin(), vsn.end(), your_condition), vsn.end());
: 这些在effective STL里都有...STL虽然很容易用, 但是完全不看手册光凭函数名想当
: 然, 也是不行的.
l*e
8 楼
effective STL, do you e-doc to share with me? thanks.
p*x
9 楼
http://www.avsnonline.net/library/download.php?id=623
【在 l***e 的大作中提到】
: effective STL, do you e-doc to share with me? thanks.
【在 l***e 的大作中提到】
: effective STL, do you e-doc to share with me? thanks.
l*e
11 楼
感谢。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
相关阅读
Who work with Sencha/HTML5 ?Scala higher-kind type和jvm弱type system不明白为啥全都冲着WEB义无反顾的扎进去退google保平安如何实现程序返回的验证码通过语音打到用户电话上vpn 网速慢的问题没有大牛去开个FP版吗python,在class method里调用别的class,怎么区分两者的self?琢磨了一下c++ smart pointer,发现不能到处用嵌入式怎么才能入门我们来聊聊paradigms吧discussion: why do we need entry_points in python (setup_t (转载)中国码工相当sb有人用pig吗?Haskell有什么公司在用呀?买macbook pro到哪买划算?C++怎么定义1列random number generators请问哪里能找到会NLP或者information retrieval的programmer?Principles of Reactive Programming 网上课程请问一个regex的问题