交换顶点C ++中的元素

时间:2016-01-25 06:49:02

标签: c++

嘿伙计们我试图交换并旋转我的顶点90度但是当我打印时它只显示

  • CT
  • AO

何时显示

  • CT
  • AO
  • TM

我知道我的问题是,当我交换它们时,顶点没有足够的空间,因为当我推动tom和cat制作顶点时[3] [2]但是现在我正在尝试制作它[2] [ 3]所以我知道这是问题,我试图保留空间,但不会工作,因为它只会覆盖那里的任何东西。所以任何帮助都会让人感到非常感谢

#include <iostream>
#include <string>
#include <vector>

    int main() {
        std::vector<std::string> lines;
        //lines.reserve(100);

        lines.push_back("tom");
        lines.push_back("cat");

        for(int r = 0; r < lines.size(); r++)//swapping
        {
            for(int c = r; c < lines[r].size(); c++)
            {
                std::swap(lines[r][c], lines[c][r]);
            }
        }

        for(int r = 0; r < lines.size(); r++)//where I am rotating
        {
            for(int c =0; c < lines[c].size()/2; c++)
            {
                std::swap(lines[r][c], lines[r][lines[c].size()-c-1]);
            }
        }

        for(int i=0; i<lines.size(); i++)
            std::cout << lines[i] << "\n";


        return 0;
    }

1 个答案:

答案 0 :(得分:0)

使用两个向量。

#include <iostream>
#include <sstream>
#include <string>
#include <utility>
#include <vector>

using namespace std;

int main(int argc, char const *argv[])
{
    vector<string> v1;
    vector<string> v2;

    v1.push_back("tom");
    v1.push_back("cat");
    for (auto& it : v1) {
        cout << it << endl;
    }

    swap(v1.front(), v1.back());
    for (auto& it : v1) {
        cout << it << endl;
    }

    auto first = v1.front();
    auto last  = v1.back();

    for (string::iterator it1 = first.begin(), it2 = last.begin(); it1 != first.end(); ++it1, ++it2) {
        stringstream ss;
        string s;
        ss << *it1 << *it2;
        ss >> s;
        v2.push_back(s);
    }

    for (auto& it : v2) {
        cout << it << endl;
    }

    return 0;
}

输出

tom
cat

cat
tom

ct
ao
tm