BitMagic-C++
rscsample03.cpp

Example of how to use bm::rsc_sparse_vector<>::const_iterator

See also
bm::rsc_sparse_vector
bm::rsc_sparse_vector::const_iterator
bm::rsc_sparse_vector::const_iterator::go_to
/*
Copyright(c) 2002-2020 Anatoliy Kuznetsov(anatoliy_kuznetsov at yahoo.com)
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
For more information please visit: http://bitmagic.io
*/
/** \example rscsample03.cpp
Example of how to use bm::rsc_sparse_vector<>::const_iterator
\sa bm::rsc_sparse_vector
\sa bm::rsc_sparse_vector::const_iterator
\sa bm::rsc_sparse_vector::const_iterator::go_to
*/
/*! \file rscsample03.cpp
\brief Example: bm::rsc_sparse_vector<>::const_iterator
@sa rscsample02.cpp
*/
#include <iostream>
#include <vector>
#include "bm.h"
#include "bmsparsevec.h"
using namespace std;
/// Print sparse vector content
template<typename SV> void PrintSV(const SV& sv)
{
typename SV::const_iterator it = sv.begin();
typename SV::const_iterator it_end = sv.end();
for (; it != it_end; ++it)
{
if (it.is_null())
cout << "NULL";
else
cout << *it;
cout << ", ";
}
cout << endl;
}
int main(void)
{
try
{
// add sample data using back insert iterator
//
{
auto bit = csv1.get_back_inserter();
bit = 10;
bit = 11;
bit.add_null();
bit = 13;
bit = 14;
bit.add_null(2);
bit = 256;
bit.flush();
}
// sync call updates rank-select index of the succinct container and
// it is necessary for the correct work of the const_iterator
// and bm::rsc_sparse_vector<>::decode()
// and bm::rsc_sparse_vector<>::decode_buf() methods
//
csv1.sync();
PrintSV(csv1); // 10, 11, NULL, 13, 14, NULL, NULL, 256,
// another way to use iterator at a random position
// is to use rsc_sparse_vector<>::get_const_iterator()
{
if (it.valid()) // check if iterator is avlid and not at the end
{
do
{
auto v = it.value();
if (it.is_null())
cout << "NULL";
else
cout << v;
cout << ", ";
} while (it.advance()); // while it is able to advance
cout << endl;
// iterator can be re-positioned
//
it.go_to(3); // position iterator at 3
cout << it.value() << endl; // 13
}
}
}
catch(std::exception& ex)
{
std::cerr << ex.what() << std::endl;
return 1;
}
return 0;
}
bm::sparse_vector
sparse vector with runtime compression using bit transposition method
Definition: bmsparsevec.h:81
bm::rsc_sparse_vector::const_iterator::go_to
void go_to(size_type pos) BMNOEXCEPT
re-position to a specified position
Definition: bmsparsevec_compr.h:1609
bm::rsc_sparse_vector::const_iterator
Const iterator to traverse the rsc sparse vector.
Definition: bmsparsevec_compr.h:124
bmsparsevec.h
Sparse constainer sparse_vector<> for integer types using bit-transposition transform.
bm::rsc_sparse_vector::back_insert_iterator::add_null
void add_null() BMNOEXCEPT
add NULL (no-value) to the container
Definition: bmsparsevec_compr.h:1538
bmsparsevec_compr.h
Compressed sparse container rsc_sparse_vector<> for integer types.
bm::rsc_sparse_vector::const_iterator::value
value_type value() const
Get current position (value)
Definition: bmsparsevec_compr.h:1641
sparse_vector_u32
bm::sparse_vector< unsigned, bm::bvector<> > sparse_vector_u32
Definition: rscsample03.cpp:60
bm::rsc_sparse_vector::const_iterator::is_null
bool is_null() const BMNOEXCEPT
Get NULL status.
Definition: bmsparsevec_compr.h:1690
bm::rsc_sparse_vector::const_iterator::valid
bool valid() const BMNOEXCEPT
Returns true if iterator is at a valid position.
Definition: bmsparsevec_compr.h:184
main
int main(void)
Definition: rscsample03.cpp:64
bm::rsc_sparse_vector::get_back_inserter
back_insert_iterator get_back_inserter()
Definition: bmsparsevec_compr.h:582
rsc_sparse_vector_u32
bm::rsc_sparse_vector< unsigned, sparse_vector_u32 > rsc_sparse_vector_u32
Definition: rscsample03.cpp:61
bm::rsc_sparse_vector
Rank-Select compressed sparse vector.
Definition: bmsparsevec_compr.h:58
bm::rsc_sparse_vector::const_iterator::advance
bool advance() BMNOEXCEPT
advance iterator forward by one
Definition: bmsparsevec_compr.h:1618
bm::rsc_sparse_vector::sync
void sync(bool force)
Re-calculate prefix sum table used for rank search.
Definition: bmsparsevec_compr.h:1121
bm.h
Compressed bit-vector bvector<> container, set algebraic methods, traversal iterators.
PrintSV
void PrintSV(const SV &sv)
Print sparse vector content.
Definition: rscsample03.cpp:44
bm::rsc_sparse_vector::get_const_iterator
const_iterator get_const_iterator(size_type idx) const BMNOEXCEPT
Get const_itertor re-positioned to specific element.
Definition: bmsparsevec_compr.h:579