Вопрос по c++ – печать содержимого 2d вектора
это код, который я запускаю:
<code>std::vector<std::vector<double>> test; test.push_back(std::vector<double>(30)); std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end(); while (it!=end) { std::vector<double>::iterator it1=it->first.begin(),end1=it->first.end(); while (it1!=end1) { std::copy(it1.begin(),it1.end(),std::ostream_iterator<double>(std::cout, " ")); ++it1; } ++it; } </code>
это ошибка компиляции, которую я получаю:
<code>data.cpp:33:45: error: ‘class std::vector<double>’ has no member named ‘first’ data.cpp:33:68: error: ‘class std::vector<double>’ has no member named ‘first’ data.cpp:35:16: error: ‘class std::vector<double>::iterator’ has no member named ‘begin’ data.cpp:35:28: error: ‘class std::vector<double>::iterator’ has no member named ‘end’ data.cpp:35:34: error: ‘ostream_iterator’ is not a member of ‘std’ data.cpp:35:56: error: expected primary-expression before ‘double' </code>
любые предложения о том, как это исправить, чтобы я мог распечатать содержимое теста
std::vector<double>::const_iterator
Я думаю, это больше, чем ты хочешь.
std::vector<std::vector<double>> test;
// Put some actual data into the test vector of vectors
for(int i = 0; i < 5; ++i)
{
std::vector<double> random_stuff;
for(int j = 0; j < 1 + i; ++j)
{
random_stuff.push_back(static_cast<double>(rand()) / RAND_MAX);
}
test.push_back(random_stuff);
}
std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end();
while (it!=end)
{
std::vector<double>::iterator it1=it->begin(),end1=it->end();
std::copy(it1,end1,std::ostream_iterator<double>(std::cout, " "));
std::cout << std::endl;
++it;
}
Вы не хотите сначала, потому что ваш вектор не содержит пар, и вам не нужно зацикливаться на основе it1 и end1, потому что они обозначают диапазон, который вы передаете копировать.
Первы std::vectors
не содержитstd::pairs
, так что нетfirst
илиsecond
:
while (it!=end) {
std::vector<double>::iterator it1=it->begin(),end1=it->end();
Второй вызовstd::copy
принимает диапазон, который, вероятно, должен соответствовать одному из ваших внутренних векторов. Таким образом, вы идете на один уровень слишком глубоко.
Ты можешь перебрать внешний векторtest
, а затем распечатайте с помощьюcopy
для каждого из его элементов (который является вектором).
std::vector<std::vector<double>> test;
test.push_back(std::vector<double>(30));
std::vector<std::vector<double> >::iterator it=test.begin(), end=test.end();
for ( it!= end, ++it) {
std::copy(it1-begin(),it->end(),std::ostream_iterator<double>(std::cout, " "));
}