Фрагменты кода, показанные ниже, процитированы из вашего кода, как это было, когда я писал это.
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>
class Sizes
{
public:
void operator() ( std::vector<int> v ) {
v
передается по значению, что может быть довольно неэффективно!Передайте его по ссылке.
sizeVec.push_back( v.size() );
}
std::vector<int> sizeVec;
};
void outFunc (int i) {
std::cout << " " << i;
}
int _tmain(int argc, _TCHAR* argv[])
_tmain
никогда не был действительной формой main
.
Этот код в лучшем случае будеткомпилируется только с компилятором Microsoft.
Кроме того, _tmain
не имеет смысла даже с компилятором Microsoft, за исключением одного особого случая при нацеливании на Windows 9x (даже не на цели на Windows 9x в целом).
Почему вы пишете больше для того, чтобы сделать ваш код нестандартным и не пригодным для использования не программистами Windows?
Использовать стандартные main
.
{
std::vector<std::vector<int>> twodVec;
>>
, вероятно, будет компилироваться с большинством современных компиляторов, поскольку они поддерживают грядущий C ++ 0x.Но в C ++ 98 / C ++ 03 это недопустимо.Таким образом, для переносимого кода все равно пишите > >
(обратите внимание на пробел).
std::vector<int> vec;
vec.push_back( 6 );
twodVec.push_back( vec );
vec.push_back( 3 );
twodVec.push_back( vec );
vec.push_back( 8 );
twodVec.push_back( vec );
vec.push_back( 3 );
twodVec.push_back( vec );
Sizes sizes;
std::for_each( twodVec.begin(), twodVec.end(), sizes );
sizes
может быть свободно скопировано здесь и фактически передаетсязначение.
Однако std::for_each
возвращает копию окончательного результата.
Вы можете присвоить его обратно sizes
, даже если это довольно неэффективный способ выполнения действий, когдаФунктор содержит вектор.
std::for_each( sizes.sizeVec.begin(), sizes.sizeVec.end(), outFunc );
return 0;
Этот окончательный return 0;
не требуется для стандартного main
, поскольку он выражает только возвращаемое значение по умолчанию для стандартного main
.
}
Приветствия и hth.