たとえば、値 (1,2)、(2,3)、(3,4) などを関数に渡し、数値のリストを返すようにしたいとしましょう。 、 3 、 5 、 3 、 6 いくつかの操作の後。C++ でこの結果を達成するための最良の方法は何ですか? Python から移行した後、ここでそれを行うのははるかに難しいようですが、何か助けはありますか?
質問する
391 次
3 に答える
3
一般に、std::vector
コンテナとそのメソッドを使用しますpush_back
。その後、ベクトルを返すことができます (値で返します。コンパイラはおそらく移動セマンティクスをサポートしているため、わざわざ動的に割り当てる必要はありません)。
std::vector<int> func(
const std::tuple<int, int>& a, const std::tuple <int, int>& b)
{
std::vector<int> ret;
ret.push_back(...);
ret.push_back(...);
return ret;
}
于 2012-08-12T10:25:33.817 に答える
2
これが最善の方法だと言っているわけではありませんが、メモリコピーの見通しからもかなり良いと思いvector
ますoperator=
。
#include <vector>
using namespace std;
/**
* Meaningful example: takes a vector of tuples (pairs) values_in and returns in
* values_out the second elements of the tuple whose first element is less than 5
*/
void less_than_5(const vector<pair<int, int> >& values_in, vector<int>& values_out) {
// clean up the values_out
values_out.clear();
// do something with values_in
for (vector<pair<int, int> >::iterator iter = values_in.begin(); iter != values_in.end(); ++iter) {
if (iter->first < 5) {
values_out.push_back(iter->second);
}
}
// clean up the values_out (again just to be consistent :))
values_out.clear();
// do something with values_in (equivalent loop)
for (int i = 0; i < values_in.size(); ++i) {
if (values_in[i].first < 5) {
values_out.push_back(values_in[i].second);
}
}
// at this point values_out contains all second elements from values_in tuples whose
// first is less than 5
}
于 2012-08-12T10:28:08.057 に答える
0
void function(const std::vector<std::pair<int,int>> &pairs,
std::vector<int> &output) {
/* ... */
}
于 2012-08-12T10:26:03.083 に答える