How would I find and replace chars inside a 2d vector of chars? c++











up vote
2
down vote

favorite












Lets say I have a 2d array of chars that looks like:



ooooooooo
ooooooooo
ooooooooo
ooooxoooo
ooooooooo
ooooooooo
ooooooooo


lets say i want to replace all the o's to be I instead so it would look like this:



IIIIIIIII
IIIIIIIII
IIIIIIIII
IIIIxIIII
IIIIIIIII
IIIIIIIII
IIIIIIIII


the current way im getting input from the user is using the command line:



int main(int argc, char* argv) {


This is what ive come up with so far:



void replacee(vector<vector<char>> &vec, char oldd, char neww) {
for(vector<char> v:vec)
// change
{
for(char c:v)
if (c == oldd) {
c == neww;
}
}
}


Ps. Sorry if this is a simple solution, im new to c++ and ive looked up ways other people have done it but they have always had a vector of Strings instead of char's.










share|improve this question




























    up vote
    2
    down vote

    favorite












    Lets say I have a 2d array of chars that looks like:



    ooooooooo
    ooooooooo
    ooooooooo
    ooooxoooo
    ooooooooo
    ooooooooo
    ooooooooo


    lets say i want to replace all the o's to be I instead so it would look like this:



    IIIIIIIII
    IIIIIIIII
    IIIIIIIII
    IIIIxIIII
    IIIIIIIII
    IIIIIIIII
    IIIIIIIII


    the current way im getting input from the user is using the command line:



    int main(int argc, char* argv) {


    This is what ive come up with so far:



    void replacee(vector<vector<char>> &vec, char oldd, char neww) {
    for(vector<char> v:vec)
    // change
    {
    for(char c:v)
    if (c == oldd) {
    c == neww;
    }
    }
    }


    Ps. Sorry if this is a simple solution, im new to c++ and ive looked up ways other people have done it but they have always had a vector of Strings instead of char's.










    share|improve this question


























      up vote
      2
      down vote

      favorite









      up vote
      2
      down vote

      favorite











      Lets say I have a 2d array of chars that looks like:



      ooooooooo
      ooooooooo
      ooooooooo
      ooooxoooo
      ooooooooo
      ooooooooo
      ooooooooo


      lets say i want to replace all the o's to be I instead so it would look like this:



      IIIIIIIII
      IIIIIIIII
      IIIIIIIII
      IIIIxIIII
      IIIIIIIII
      IIIIIIIII
      IIIIIIIII


      the current way im getting input from the user is using the command line:



      int main(int argc, char* argv) {


      This is what ive come up with so far:



      void replacee(vector<vector<char>> &vec, char oldd, char neww) {
      for(vector<char> v:vec)
      // change
      {
      for(char c:v)
      if (c == oldd) {
      c == neww;
      }
      }
      }


      Ps. Sorry if this is a simple solution, im new to c++ and ive looked up ways other people have done it but they have always had a vector of Strings instead of char's.










      share|improve this question















      Lets say I have a 2d array of chars that looks like:



      ooooooooo
      ooooooooo
      ooooooooo
      ooooxoooo
      ooooooooo
      ooooooooo
      ooooooooo


      lets say i want to replace all the o's to be I instead so it would look like this:



      IIIIIIIII
      IIIIIIIII
      IIIIIIIII
      IIIIxIIII
      IIIIIIIII
      IIIIIIIII
      IIIIIIIII


      the current way im getting input from the user is using the command line:



      int main(int argc, char* argv) {


      This is what ive come up with so far:



      void replacee(vector<vector<char>> &vec, char oldd, char neww) {
      for(vector<char> v:vec)
      // change
      {
      for(char c:v)
      if (c == oldd) {
      c == neww;
      }
      }
      }


      Ps. Sorry if this is a simple solution, im new to c++ and ive looked up ways other people have done it but they have always had a vector of Strings instead of char's.







      c++ vector char






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 8 at 21:36









      scohe001

      7,78912141




      7,78912141










      asked Nov 8 at 21:33









      xannax159

      448




      448
























          4 Answers
          4






          active

          oldest

          votes

















          up vote
          2
          down vote



          accepted










          Your outer loop needs to take a reference to the inner vector. Without a reference the inner loop only modifies a copy of the vector. One suggestion, use a standard library algorithm instead of a loop to modify the values.



          #include <algorithm>

          void replacee(vector<vector<char>> &vec, char oldd, char neww)
          {
          for (vector<char> &v : vec) // reference to innver vector
          {
          replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
          }
          }





          share|improve this answer























          • Thank you, using a library makes things so much easier! Thanks!
            – xannax159
            Nov 9 at 23:23


















          up vote
          1
          down vote













          Note the critical difference between = and ==. The expression c == oldd is a test for equality. That is, it returns true if c and oldd have the same value, and false otherwise. On the other hand, an expression like c = neww is an assignment, which means that the value of neww is copied into the variable c.



          Additionally, in your for loops, you should loop over elements by reference if you want to make lasting changes.



          for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }

          for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }


          Try this fix:



          for(vector<char>& v : vec){
          for(char& c : v){
          if (c == oldd) { // only enter the clause if c and old are equal
          // c == neww; <- this does nothing, it returns a boolean value that never gets used
          c = neww; // <- this assigns the new value
          }
          }
          }


          Hope that helps! Happy coding






          share|improve this answer




























            up vote
            1
            down vote













            You're super close! You only have two mistakes.




            1. This one's pretty silly, but it looks like you accidentally put an extra equal's sign in the assignment of the new character. Change c == neww; (which compares them and does nothing) to c = neww;.

            2. This is a little more nuanced, but you'll need to change your loops to use reference variables. Right now, when you loop, you're dealing with a copy of each row, and c is a copy of each value in each copied row. This is as simple as adding two &'s in your loops.


            When all is said an done and you fix your indenting and make your formatting stick to either braces on the same line or the next line, things should look like:



            void replacee(vector<vector<char>> &vec, char oldd, char neww) {
            for(vector<char> &v:vec) {
            for(char &c:v) {
            if (c == oldd) { c = neww; }
            }
            }
            }


            See it work here: ideone






            share|improve this answer























            • Thanks for the really friendly response. I realized what i did with the = operator.
              – xannax159
              Nov 9 at 23:23


















            up vote
            0
            down vote













            void replace(vector<vector<char>> &vec, char oldd, char neww) {
            for(auto v : vec)
            {
            for(auto c : v)
            if (c == oldd) {
            c = neww;
            }
            }
            }


            Here you go. C++ allows you to use auto in a foreach loop and etc. and it is super neat.






            share|improve this answer























            • Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
              – Blastfurnace
              Nov 8 at 22:07










            • Thank you very much :)
              – Long Nguyen
              Nov 8 at 22:25










            • You need references in both loops: for (auto &v : vec) and for (auto &c : v)
              – Blastfurnace
              Nov 8 at 22:28













            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216482%2fhow-would-i-find-and-replace-chars-inside-a-2d-vector-of-chars-c%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            4 Answers
            4






            active

            oldest

            votes








            4 Answers
            4






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            2
            down vote



            accepted










            Your outer loop needs to take a reference to the inner vector. Without a reference the inner loop only modifies a copy of the vector. One suggestion, use a standard library algorithm instead of a loop to modify the values.



            #include <algorithm>

            void replacee(vector<vector<char>> &vec, char oldd, char neww)
            {
            for (vector<char> &v : vec) // reference to innver vector
            {
            replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
            }
            }





            share|improve this answer























            • Thank you, using a library makes things so much easier! Thanks!
              – xannax159
              Nov 9 at 23:23















            up vote
            2
            down vote



            accepted










            Your outer loop needs to take a reference to the inner vector. Without a reference the inner loop only modifies a copy of the vector. One suggestion, use a standard library algorithm instead of a loop to modify the values.



            #include <algorithm>

            void replacee(vector<vector<char>> &vec, char oldd, char neww)
            {
            for (vector<char> &v : vec) // reference to innver vector
            {
            replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
            }
            }





            share|improve this answer























            • Thank you, using a library makes things so much easier! Thanks!
              – xannax159
              Nov 9 at 23:23













            up vote
            2
            down vote



            accepted







            up vote
            2
            down vote



            accepted






            Your outer loop needs to take a reference to the inner vector. Without a reference the inner loop only modifies a copy of the vector. One suggestion, use a standard library algorithm instead of a loop to modify the values.



            #include <algorithm>

            void replacee(vector<vector<char>> &vec, char oldd, char neww)
            {
            for (vector<char> &v : vec) // reference to innver vector
            {
            replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
            }
            }





            share|improve this answer














            Your outer loop needs to take a reference to the inner vector. Without a reference the inner loop only modifies a copy of the vector. One suggestion, use a standard library algorithm instead of a loop to modify the values.



            #include <algorithm>

            void replacee(vector<vector<char>> &vec, char oldd, char neww)
            {
            for (vector<char> &v : vec) // reference to innver vector
            {
            replace(v.begin(), v.end(), oldd, neww); // standard library algorithm
            }
            }






            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Nov 8 at 22:07

























            answered Nov 8 at 22:02









            Blastfurnace

            13.6k54058




            13.6k54058












            • Thank you, using a library makes things so much easier! Thanks!
              – xannax159
              Nov 9 at 23:23


















            • Thank you, using a library makes things so much easier! Thanks!
              – xannax159
              Nov 9 at 23:23
















            Thank you, using a library makes things so much easier! Thanks!
            – xannax159
            Nov 9 at 23:23




            Thank you, using a library makes things so much easier! Thanks!
            – xannax159
            Nov 9 at 23:23












            up vote
            1
            down vote













            Note the critical difference between = and ==. The expression c == oldd is a test for equality. That is, it returns true if c and oldd have the same value, and false otherwise. On the other hand, an expression like c = neww is an assignment, which means that the value of neww is copied into the variable c.



            Additionally, in your for loops, you should loop over elements by reference if you want to make lasting changes.



            for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }

            for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }


            Try this fix:



            for(vector<char>& v : vec){
            for(char& c : v){
            if (c == oldd) { // only enter the clause if c and old are equal
            // c == neww; <- this does nothing, it returns a boolean value that never gets used
            c = neww; // <- this assigns the new value
            }
            }
            }


            Hope that helps! Happy coding






            share|improve this answer

























              up vote
              1
              down vote













              Note the critical difference between = and ==. The expression c == oldd is a test for equality. That is, it returns true if c and oldd have the same value, and false otherwise. On the other hand, an expression like c = neww is an assignment, which means that the value of neww is copied into the variable c.



              Additionally, in your for loops, you should loop over elements by reference if you want to make lasting changes.



              for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }

              for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }


              Try this fix:



              for(vector<char>& v : vec){
              for(char& c : v){
              if (c == oldd) { // only enter the clause if c and old are equal
              // c == neww; <- this does nothing, it returns a boolean value that never gets used
              c = neww; // <- this assigns the new value
              }
              }
              }


              Hope that helps! Happy coding






              share|improve this answer























                up vote
                1
                down vote










                up vote
                1
                down vote









                Note the critical difference between = and ==. The expression c == oldd is a test for equality. That is, it returns true if c and oldd have the same value, and false otherwise. On the other hand, an expression like c = neww is an assignment, which means that the value of neww is copied into the variable c.



                Additionally, in your for loops, you should loop over elements by reference if you want to make lasting changes.



                for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }

                for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }


                Try this fix:



                for(vector<char>& v : vec){
                for(char& c : v){
                if (c == oldd) { // only enter the clause if c and old are equal
                // c == neww; <- this does nothing, it returns a boolean value that never gets used
                c = neww; // <- this assigns the new value
                }
                }
                }


                Hope that helps! Happy coding






                share|improve this answer












                Note the critical difference between = and ==. The expression c == oldd is a test for equality. That is, it returns true if c and oldd have the same value, and false otherwise. On the other hand, an expression like c = neww is an assignment, which means that the value of neww is copied into the variable c.



                Additionally, in your for loops, you should loop over elements by reference if you want to make lasting changes.



                for(vector<char> v : vec){ /* v is a copy, changing it will leave no effect */ }

                for(vector<char>& v : vec){ /* v is a reference, changes to it will be visible outside */ }


                Try this fix:



                for(vector<char>& v : vec){
                for(char& c : v){
                if (c == oldd) { // only enter the clause if c and old are equal
                // c == neww; <- this does nothing, it returns a boolean value that never gets used
                c = neww; // <- this assigns the new value
                }
                }
                }


                Hope that helps! Happy coding







                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 8 at 21:45









                alter igel

                2,4551824




                2,4551824






















                    up vote
                    1
                    down vote













                    You're super close! You only have two mistakes.




                    1. This one's pretty silly, but it looks like you accidentally put an extra equal's sign in the assignment of the new character. Change c == neww; (which compares them and does nothing) to c = neww;.

                    2. This is a little more nuanced, but you'll need to change your loops to use reference variables. Right now, when you loop, you're dealing with a copy of each row, and c is a copy of each value in each copied row. This is as simple as adding two &'s in your loops.


                    When all is said an done and you fix your indenting and make your formatting stick to either braces on the same line or the next line, things should look like:



                    void replacee(vector<vector<char>> &vec, char oldd, char neww) {
                    for(vector<char> &v:vec) {
                    for(char &c:v) {
                    if (c == oldd) { c = neww; }
                    }
                    }
                    }


                    See it work here: ideone






                    share|improve this answer























                    • Thanks for the really friendly response. I realized what i did with the = operator.
                      – xannax159
                      Nov 9 at 23:23















                    up vote
                    1
                    down vote













                    You're super close! You only have two mistakes.




                    1. This one's pretty silly, but it looks like you accidentally put an extra equal's sign in the assignment of the new character. Change c == neww; (which compares them and does nothing) to c = neww;.

                    2. This is a little more nuanced, but you'll need to change your loops to use reference variables. Right now, when you loop, you're dealing with a copy of each row, and c is a copy of each value in each copied row. This is as simple as adding two &'s in your loops.


                    When all is said an done and you fix your indenting and make your formatting stick to either braces on the same line or the next line, things should look like:



                    void replacee(vector<vector<char>> &vec, char oldd, char neww) {
                    for(vector<char> &v:vec) {
                    for(char &c:v) {
                    if (c == oldd) { c = neww; }
                    }
                    }
                    }


                    See it work here: ideone






                    share|improve this answer























                    • Thanks for the really friendly response. I realized what i did with the = operator.
                      – xannax159
                      Nov 9 at 23:23













                    up vote
                    1
                    down vote










                    up vote
                    1
                    down vote









                    You're super close! You only have two mistakes.




                    1. This one's pretty silly, but it looks like you accidentally put an extra equal's sign in the assignment of the new character. Change c == neww; (which compares them and does nothing) to c = neww;.

                    2. This is a little more nuanced, but you'll need to change your loops to use reference variables. Right now, when you loop, you're dealing with a copy of each row, and c is a copy of each value in each copied row. This is as simple as adding two &'s in your loops.


                    When all is said an done and you fix your indenting and make your formatting stick to either braces on the same line or the next line, things should look like:



                    void replacee(vector<vector<char>> &vec, char oldd, char neww) {
                    for(vector<char> &v:vec) {
                    for(char &c:v) {
                    if (c == oldd) { c = neww; }
                    }
                    }
                    }


                    See it work here: ideone






                    share|improve this answer














                    You're super close! You only have two mistakes.




                    1. This one's pretty silly, but it looks like you accidentally put an extra equal's sign in the assignment of the new character. Change c == neww; (which compares them and does nothing) to c = neww;.

                    2. This is a little more nuanced, but you'll need to change your loops to use reference variables. Right now, when you loop, you're dealing with a copy of each row, and c is a copy of each value in each copied row. This is as simple as adding two &'s in your loops.


                    When all is said an done and you fix your indenting and make your formatting stick to either braces on the same line or the next line, things should look like:



                    void replacee(vector<vector<char>> &vec, char oldd, char neww) {
                    for(vector<char> &v:vec) {
                    for(char &c:v) {
                    if (c == oldd) { c = neww; }
                    }
                    }
                    }


                    See it work here: ideone







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 8 at 21:57

























                    answered Nov 8 at 21:43









                    scohe001

                    7,78912141




                    7,78912141












                    • Thanks for the really friendly response. I realized what i did with the = operator.
                      – xannax159
                      Nov 9 at 23:23


















                    • Thanks for the really friendly response. I realized what i did with the = operator.
                      – xannax159
                      Nov 9 at 23:23
















                    Thanks for the really friendly response. I realized what i did with the = operator.
                    – xannax159
                    Nov 9 at 23:23




                    Thanks for the really friendly response. I realized what i did with the = operator.
                    – xannax159
                    Nov 9 at 23:23










                    up vote
                    0
                    down vote













                    void replace(vector<vector<char>> &vec, char oldd, char neww) {
                    for(auto v : vec)
                    {
                    for(auto c : v)
                    if (c == oldd) {
                    c = neww;
                    }
                    }
                    }


                    Here you go. C++ allows you to use auto in a foreach loop and etc. and it is super neat.






                    share|improve this answer























                    • Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                      – Blastfurnace
                      Nov 8 at 22:07










                    • Thank you very much :)
                      – Long Nguyen
                      Nov 8 at 22:25










                    • You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                      – Blastfurnace
                      Nov 8 at 22:28

















                    up vote
                    0
                    down vote













                    void replace(vector<vector<char>> &vec, char oldd, char neww) {
                    for(auto v : vec)
                    {
                    for(auto c : v)
                    if (c == oldd) {
                    c = neww;
                    }
                    }
                    }


                    Here you go. C++ allows you to use auto in a foreach loop and etc. and it is super neat.






                    share|improve this answer























                    • Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                      – Blastfurnace
                      Nov 8 at 22:07










                    • Thank you very much :)
                      – Long Nguyen
                      Nov 8 at 22:25










                    • You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                      – Blastfurnace
                      Nov 8 at 22:28















                    up vote
                    0
                    down vote










                    up vote
                    0
                    down vote









                    void replace(vector<vector<char>> &vec, char oldd, char neww) {
                    for(auto v : vec)
                    {
                    for(auto c : v)
                    if (c == oldd) {
                    c = neww;
                    }
                    }
                    }


                    Here you go. C++ allows you to use auto in a foreach loop and etc. and it is super neat.






                    share|improve this answer














                    void replace(vector<vector<char>> &vec, char oldd, char neww) {
                    for(auto v : vec)
                    {
                    for(auto c : v)
                    if (c == oldd) {
                    c = neww;
                    }
                    }
                    }


                    Here you go. C++ allows you to use auto in a foreach loop and etc. and it is super neat.







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Nov 8 at 22:34

























                    answered Nov 8 at 22:03









                    Long Nguyen

                    9119




                    9119












                    • Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                      – Blastfurnace
                      Nov 8 at 22:07










                    • Thank you very much :)
                      – Long Nguyen
                      Nov 8 at 22:25










                    • You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                      – Blastfurnace
                      Nov 8 at 22:28




















                    • Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                      – Blastfurnace
                      Nov 8 at 22:07










                    • Thank you very much :)
                      – Long Nguyen
                      Nov 8 at 22:25










                    • You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                      – Blastfurnace
                      Nov 8 at 22:28


















                    Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                    – Blastfurnace
                    Nov 8 at 22:07




                    Your for loops aren't quite correct. You need to take non-const references for the changes to affect the container.
                    – Blastfurnace
                    Nov 8 at 22:07












                    Thank you very much :)
                    – Long Nguyen
                    Nov 8 at 22:25




                    Thank you very much :)
                    – Long Nguyen
                    Nov 8 at 22:25












                    You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                    – Blastfurnace
                    Nov 8 at 22:28






                    You need references in both loops: for (auto &v : vec) and for (auto &c : v)
                    – Blastfurnace
                    Nov 8 at 22:28




















                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Stack Overflow!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53216482%2fhow-would-i-find-and-replace-chars-inside-a-2d-vector-of-chars-c%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    這個網誌中的熱門文章

                    Hercules Kyvelos

                    Tangent Lines Diagram Along Smooth Curve

                    Yusuf al-Mu'taman ibn Hud