Redian新闻
>
STL/vector引用成员变量。
avatar
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_iteratorallocator > >â 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();没错,单句执行没问题。
如何引用最后一个元素的成员变量。
或者还有
avatar
j*y
3
国内国外?sina什么的行不?

【在 g*********i 的大作中提到】
: 现在什么站点写博客比较好?
: 谢谢

avatar
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();

avatar
l*e
5
搞定了,多谢。
用下标访问是个好主意。
另外,还有个问题。
需要建个树,每个节点(一个结构体)可能无后续(无指针),一个子节点,或可能三五个
子节点。
最坏情况,不可预计。
如果不是给每个节点固定分配最大值指针,比如,五个或七个指针。
可否动态实现,按需分配?
就是如何实现?
avatar
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();

avatar
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虽然很容易用, 但是完全不看手册光凭函数名想当
: 然, 也是不行的.

avatar
l*e
8
effective STL, do you e-doc to share with me? thanks.
avatar
t*t
10
买一本也没几个钱...

【在 l***e 的大作中提到】
: effective STL, do you e-doc to share with me? thanks.
avatar
l*e
11
感谢。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。