Uwe Stöhr <[EMAIL PROTECTED]> writes:
> In general a document has usually not more than 10 options, so
> 10 times reforming a vector should be done in less than one millisecond.

I understand. But if nobody tells you of "a better way" then you'll never grow.

Anyway, thanks for persevering with me. It's been a long time since I wrote 
any C++ and the code I posted was full of C# syntax. At least this time I've 
got the thing to compile ;-)

In your original code, "data" is actually an array of c-strings, rather than a 
vector<string>. Personally, I'd prefer to use vector<string>, but I'll leave 
it to you to either adapt tex2lyx or the code below :-P

Kindest regards,
Angus

#include <algorithm>
#include <string>
#include <vector>

using std::find;
using std::string;
using std::vector;

namespace lyx {

class element_matches
{
        vector<string> const & data_;

public:
        element_matches(vector<string> const & data) : data_(data) {}

        bool operator()(string const & opt_element) const
        {
                vector<string>::const_iterator it = std::find(
                        data_.begin(), data_.end(), opt_element);
                return it != data_.end();
        }
};


void delete_opt(vector<string> & opts, vector<string> const & to_discard)
{
        if (opts.empty() || to_discard.empty())
                return;

        vector<string>::iterator new_end = std::remove_if(
                opts.begin(), opts.end(), element_matches(to_discard));
        opts.erase(new_end, opts.end());
}

} // namespace lyx


Reply via email to