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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 想删向量里后面的元素.
: 元素是一个结构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 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 想删向量里后面的元素.
: 元素是一个结构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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 想删向量里后面的元素.
: 元素是一个结构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 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 想删向量里后面的元素.
: 元素是一个结构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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: 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 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: 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 的大作中提到】![](/moin_static193/solenoid/img/up.png)
: effective STL, do you e-doc to share with me? thanks.
【在 l***e 的大作中提到】
![](/moin_static193/solenoid/img/up.png)
: effective STL, do you e-doc to share with me? thanks.
l*e
11 楼
感谢。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
相关阅读
这个swift又臭又长,比C++还烦,而且属于毫无技术含量那种烦人民日报欢迎Google回归, 百度: 我们有信心再赢一次!面试做题是不是相当于古人当场写诗作赋Java 社区还是发展很快的[bssd]来美国就放弃了过去至少20年的软实力线性代数学的好的进来一下 (转载)你们看了国内那个公式相声吗估计我也要回国了Golang能做到充分利用多核么?一个印度人小公司样本李彦宏称"百度没有占便宜,有信心再赢一次"辛顿非常励志EVGA Nvidia 1080 GTX = 429[bssd]最近的一些进展和问题弱鸡疑问:现在的深度学习是不是都是静态模型大学实验室之外 是没有高科技的 -- 郭台铭函数式语言怎么实现常用数据结构?evolutionary-algorithm-outperforms-deep-learning-machines-数据库里的B+树为啥要用个指针把最底层的相邻叶节点连起来?Opening available (转载)