以下のコードを最適化するために、メンバ関数str1
とstr2
のいずれかにポインタを渡すと有益になると思われます。引数はfill_vec
に2つの明示的なループがあるのではなく、fill_vec
になります。C++で引数としてメンバ関数へのポインタを渡します。
C++ 11でこれを行う方法がありますか?あるいは、別の戦略を提案していますか?
#include <iostream>
#include <vector>
#include <map>
class Base
{
private:
std::map<int, std::string> m_base1, m_base2;
std::vector<std::string> m_str1 = {"one", "two", "three"};
std::vector<std::string> m_str2 = {"four", "five", "six"};
public:
std::vector<std::string> &str1() { return m_str1; }
std::vector<std::string> &str2() { return m_str2; }
std::map<int, std::string> &base1() { return m_base1; }
std::map<int, std::string> &base2() { return m_base2; }
};
template <typename T>
void fill_vec(T *b)
{
size_t counter = 0;
for (const auto &str_iter : b->str1())
(b->base1())[counter++] = str_iter;
counter=0;
for (const auto &str_iter : b->str2())
(b->base2())[counter++] = str_iter;
}
int main(int argc, char *argv[])
{
Base *b = new Base;
fill_vec(b);
return 0;
}
あなたは 'base1' /' BASE2へのポインタを渡す必要はありません渡す方法と同じように働いています'でも? –
@ChrisDrew現在のデザインではありません。 – N08
なぜベクトルサイズが同じであるので、1つのループを使用しないのですか? – Griffin