0
我有陣列masiv_C0 = {{AB,ADF},{BC,ADF},{CD,BC},{DE,ADF}}與載體(串)工作C++
我有陣列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; }
請注意,C和C++是不同的語言。我已經糾正了你。今後請僅使用相關標籤。 – kaylum
正確的答案是啓動您的開發環境的調試器並逐步執行該程序,直到您看到它與預期的偏離。然後使用你可以看到的程序狀態,確定它偏離的原因。建議:如果輸入始終是對,則不要使用vector的'vector',使用'std :: pair'的'vector'。由於局部性的改善,速度要快得多,並且在不破壞事物的情況下移動對可能在概念上更容易。 – user4581301