Usa std::deque
si no necesita la matriz, sí.
De lo contrario, use un vector
alternativo que no se especializa en bool
, como el de Boost Container.
Ese es un problema interesante.
Si necesita lo que habría sido un std::vector si no estuviera especializado, entonces tal vez algo así funcionaría bien con su caso:
#include <vector>
#include <iostream>
#include <algorithm>
class Bool
{
public:
Bool(): m_value(){}
Bool( bool value ) : m_value(value){}
operator bool() const { return m_value; }
// the following operators are to allow bool* b = &v[0]; (v is a vector here).
bool* operator& () { return &m_value; }
const bool* operator& () const { return &m_value; }
private:
bool m_value;
};
int main()
{
std::vector<Bool> working_solution(10, false);
working_solution[5] = true;
working_solution[7] = true;
for( int i = 0; i < working_solution.size(); ++i )
{
std::cout<< "Id " << i << " = " << working_solution[i] << "(" <<(working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
}
std::sort( working_solution.begin(), working_solution.end());
std::cout<< "--- SORTED! ---" << std::endl;
for( int i = 0; i < working_solution.size(); ++i )
{
bool* b = &working_solution[i]; // this works!
std::cout<< "Id " << i << " = " << working_solution[i] << "(" << (working_solution[i] ? "true" : "false") << ")" <<std::endl; // i used ? : to be sure the boolean evaluation is correct
}
std::cin.get();
return 0;
}
Probé esto con VC9 y parece funcionar bien. La idea de la clase Bool es simular el tipo bool proporcionando el mismo comportamiento y tamaño (pero no el mismo tipo). Casi todo el trabajo lo realiza el operador bool y los constructores de copia predeterminados aquí. Agregué una clasificación para asegurarme de que reaccione como se supone cuando se usan algoritmos.
No estoy seguro de que se adapte a todos los casos. Si es adecuado para sus necesidades, sería menos trabajo que reescribir una clase similar a un vector...
Depende de tus necesidades. Iría por std::vector<unsigned char>
. Escribir un envoltorio puede estar bien si solo usa un subconjunto de la funcionalidad, de lo contrario se convertirá en una pesadilla.