由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - STL/vector引用成员变量。
相关主题
C++ vector 一边遍历一边删C++11里list迭代器判空仍然知道具体的list对象吗?
stl的一个问题有否可以O(1)remove 一个元素的java LinkedList推荐?
[合集] 关于C++ STL的list的一个问题一个C++的概念问题
STL怎样同时重载()和< ?why do we still use dynamic allocation?
如何把文件内容读到2D的vector里?STL感觉实在太变态了
问个土问题:Why iterator instead of array index for vector?c++ template question:
vector的析构问题呼唤大侠们,我实在不能实现C++泛型的精神。
请问释放容器内存的方法how to write a function take iterators as parameters?
相关话题的讨论汇总
话题: 元素话题: count话题: vsn话题: stl话题: back
进入Programming版参与讨论
1 (共1页)
l***e
发帖数: 480
1
想删向量里后面的元素.
元素是一个结构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();没错,单句执行没问题。
如何引用最后一个元素的成员变量。
或者还有
k****f
发帖数: 3794
2
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();

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

d*****a
发帖数: 110
5
老大总结的好,这个已经是标准了:
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虽然很容易用, 但是完全不看手册光凭函数名想当
: 然, 也是不行的.

l***e
发帖数: 480
6
effective STL, do you e-doc to share with me? thanks.
p****x
发帖数: 707
7
http://www.avsnonline.net/library/download.php?id=623

【在 l***e 的大作中提到】
: effective STL, do you e-doc to share with me? thanks.
t****t
发帖数: 6806
8
买一本也没几个钱...

【在 l***e 的大作中提到】
: effective STL, do you e-doc to share with me? thanks.
l***e
发帖数: 480
9
感谢。
另外。就是有没有好的书推荐,讲STL。
主要关于如何用这些容器,自定义各种运算。
每个逻辑依赖哪个运算。
我手上有几本书名都是有关STL的。可是,基本元素很多都是整数.
等到自己用结构作元素类型时,不知该定义哪个运算。
当然,有电子版最好。
1 (共1页)
进入Programming版参与讨论
相关主题
how to write a function take iterators as parameters?如何把文件内容读到2D的vector里?
c++ interview: iterator 和 pointer区别?问个土问题:Why iterator instead of array index for vector?
问一个C++ set和unordered_set iterator的问题vector的析构问题
什么是OS Memory management and heap structure?请问释放容器内存的方法
C++ vector 一边遍历一边删C++11里list迭代器判空仍然知道具体的list对象吗?
stl的一个问题有否可以O(1)remove 一个元素的java LinkedList推荐?
[合集] 关于C++ STL的list的一个问题一个C++的概念问题
STL怎样同时重载()和< ?why do we still use dynamic allocation?
相关话题的讨论汇总
话题: 元素话题: count话题: vsn话题: stl话题: back