Как скопировать вектор по столбцам? - PullRequest
3 голосов
/ 05 января 2011

У меня есть двумерный вектор, скажем

vector < vector < int > > sample;

sample = 1 2 3 4 5
         6 7 8 9 0
         1 1 1 1 1
         2 2 2 2 2

Теперь я хочу скопировать только два последних столбца в другой двумерный вектор, например

vector < vector < int > > test;

test = 4 5
       9 0 
       1 1
       2 2

Как я могу сделать это эффективно?

Ответы [ 2 ]

3 голосов
/ 05 января 2011

Может, вот так?

#include <algorithm>

vector<vector<int> > new_vector;
new_vector.resize(sample.size());

for (size_t i = 0; i < new_vector.size(); ++i) {
    new_vector[i].resize(2);
    copy(sample[i].end() - 2, sample[i].end(), new_vector[i].begin());
}
3 голосов
/ 05 января 2011

Я слышал, что в boost есть цикл foreach

std::vector< std::vector<int> > v;
BOOST_FOREACH(std::vector<int> const &i, test) {
  v.push_back(std::vector<int>(i.end() - 2, i.end()));
}

Если у вас нет буста на руках, я бы использовал обычный цикл for. Но я не думаю, что я бы использовал вложенный std::vector в первую очередь. Если у вас есть только строки из двух столбцов, лучше всего использовать вектор boost::array<int, 2>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...