我有阵列masiv_C0 = {{AB,ADF},{BC,ADF},{CD,BC},{DE,ADF}}
我有阵列masiv_X0 = {{AB,ADF},{CD,BC},{DE,ADF}}
有必要创建前两个的第三个数组:
masiv_Y1 = masiv_C0 - masiv_X0 = {{BC,ADF}}
问题是在我创建的第三个数组中我删除了单个元素。
结果,而不是获得{{BC,ADF}}我获得{{BC}} ...帮助纠正代码!谢谢:))
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
typedef std::vector<std::string> String1D;
typedef std::vector<String1D> String2D;
int main()
{
String2D masiv_C0(4, String1D(2));
masiv_C0[0][0]="AB";
masiv_C0[0][1]="ADF";
masiv_C0[1][0]="BC";
masiv_C0[1][1]="ADF";
masiv_C0[2][0]="CD";
masiv_C0[2][1]="BC";
masiv_C0[3][0]="DE";
masiv_C0[3][1]="ADF";
String2D masiv_X0(3, String1D(2));
masiv_X0[0][0]="AB";
masiv_X0[0][1]="ADF";
masiv_X0[0][0]="CD";
masiv_X0[0][1]="BC";
masiv_X0[0][0]="DE";
masiv_X0[0][1]="ADF";
String2D masiv_Y1 = masiv_C0;
for ( size_t i = 0; i < masiv_X0.size(); ++i)
{
for ( size_t j = 0; j < masiv_X0[i].size(); ++j)
{
auto& str = masiv_X0[i][j];
for (size_t cur = 0; cur < masiv_Y1.size(); ++cur)
{
auto iter = std::remove(masiv_Y1[cur].begin(), masiv_Y1[cur].end(), str);
masiv_Y1[cur].erase(iter, masiv_Y1[cur].end());
}
}
}
String2D::iterator iter = masiv_Y1.begin();
while (iter != masiv_Y1.end())
{
std::copy((*iter).begin(), (*iter).end(), std::ostream_iterator<std::string>(cout, " "));
cout << "\n";
++iter;
}
return 0; }
答案 0 :(得分:1)
X-Y回答:扔掉你正在做的事情。标准库可以为您完成所需的一切。没有麻烦。不用大惊小怪。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
// shorten this templated nightmare
using vecpair = std::vector<std::pair<std::string,std::string>>;
// define inputs
vecpair masiv_C0{{"AB","ADF"},{"BC","ADF"},{"CD","BC"},{"DE","ADF"}};
vecpair masiv_X0{{"AB","ADF"},{"CD","BC"},{"DE","ADF"}};
// define output
vecpair masiv_Y1;
// use std library to do the work
std::set_difference(masiv_C0.begin(), masiv_C0.end(),
masiv_X0.begin(), masiv_X0.end(),
std::back_inserter(masiv_Y1));
// print it.
for (const std::pair<std::string,std::string> & p: masiv_Y1)
{
std::cout << "{" << p.first << "," << p.second << "}\n";
}
return 0;
}
附录说明:
除了打印循环之外的所有内容都应该与std::vector<std::vector<std::string>>
一起使用,vector
的{{1}}也应该是外部的,并且会影响性能的要求。